File: flow.rb

package info (click to toggle)
dlr-languages 20090805%2Bgit.e6b28d27%2Bdfsg-3
  • links: PTS, VCS
  • area: main
  • in suites: squeeze
  • size: 51,484 kB
  • ctags: 59,257
  • sloc: cs: 298,829; ruby: 159,643; xml: 19,872; python: 2,820; yacc: 1,960; makefile: 96; sh: 65
file content (120 lines) | stat: -rw-r--r-- 1,427 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
$M = {}

class Class
  def def_method(name, &p) 
    $M[name] = lambda &p
  end
end


class C
  define_method(:foo) {
	puts 'breaking foo'
	break 'foo'
  }

  define_method(:bar, &lambda{
	puts 'breaking bar'
	break 'bar'  
  })
    
  define_method(:f1) {
    puts 'redoing f1'
    if $r > 0
      $r -= 1
      redo
    end  
  }
  
  define_method(:g1) {
    puts 'retrying g1'
    if $r > 0
      $r -= 1
      retry
    end  
  }
  
  def_method(:xfoo) {
	puts 'breaking xfoo'
	break 'xfoo'
  }

  def_method(:xbar, &lambda{
	puts 'breaking xbar'
	break 'xbar'  
  })
  
  def_method(:xf1) {
    puts 'redoing xf1'
    if $r > 0
      $r -= 1
      redo
    end  
  }
  
  def_method(:xg1) {
    puts 'retrying xg1'
    if $r > 0
      $r -= 1
      retry
    end  
  }
  
  def call_xfoo
    $M[:xfoo][]
  end
  
  def call_xbar
    $M[:xbar][]
  end
  
  def call_xf1
    $M[:xf1][]
  end
  
  def call_xg1
    $M[:xg1][]
  end  
end

puts '-- real --'

puts C.new.foo
puts C.new.bar

$r = 1;
puts C.new.f1

$r = 1;
puts C.new.g1 rescue puts $! # retry from proc-closure

puts '-- emulated --'

puts C.new.call_xfoo
puts C.new.call_xbar

$r = 1;
puts C.new.call_xf1

$r = 1;
puts C.new.call_xg1 rescue puts $! # retry from proc-closure

puts '-- hash --'

h = Hash.new {
	puts 'breaking 2'
	break '2'
  }
  
begin
  puts h[1]
rescue
  puts $!
end  

h = Hash.new(&lambda {
	puts 'breaking 3'
	break '3'
  })
  
puts h[1]