Procとかlambdaとか
ハチドリ本にあった例。けっこうわかりやすいかも。
def sequence2(n, m, c) i = 0 while(i < n) yield i*m + c i += 1 end end puts "sequence2" sequence2(5, 2, 2) {|x| puts x} def sequence3(n, m, c, &b) i = 0 while(i < n) b.call(i*m + c) i += 1 end end puts "sequence3" sequence3(5, 2, 2) {|x| puts x} def sequence4(n, m, c, b) i = 0 while(i < n) b.call(i*m + c) i += 1 end end puts "sequence4" p = Proc.new {|x| puts x} sequence4(5, 2, 2, p) puts "sum" a, b = [1, 2, 3], [4, 5] sum = a.inject(0) {|total, x| total+x} puts sum sum = b.inject(sum) {|total, x| total+x} puts sum puts "sumation" a, b = [1, 2, 3], [4, 5] sumation = Proc.new {|total, x| total+x} sum = a.inject(0, &sumation) puts sum sum = b.inject(sum, &sumation) puts sum puts "Proc" p = Proc.new {|x, y| print x, y} p.call(1) p.call(1, 2) p.call(1, 2, 3) print "\n" puts "lambda" l = lambda {|x, y| print x, y} #l.call(1) とやるとin `call': wrong number of arguments(1 for 2) (ArgumentError)っていわれる l.call(1, 2) #l.call(1, 2, 3) とやるとin `call': wrong number of arguments(3 for 2) (ArgumentError)っていわれる
実行結果
sequence2
2
4
6
8
10
sequence3
2
4
6
8
10
sequence4
2
4
6
8
10
sum
6
15
sumation
6
15
Proc
1nil1212
lambda
12