Rubyのブロックを勉強した
Block
Rubyにはブロックという要素があるが、File.open の様に、
値を返却したり、ブロックで扱ったりを両方出来る関数
がふと気になった。
f = File.open("file") f.each {|l| ... }
File.open("file"){ |f| f.each {|l| ... } }
block_given?
こんな関数で切り分けが出来るらしい。
何ともrubyっぽい!
class Block def initialize(num) @a = Array.new (0..num).each { |i| @a[i] = i*10 } end def test (offset,&block) if block_given? @a[offset..-1].each_with_index { |v,i| block.call @a[i+offset] } else return @a[offset..-1] end end end b = Block.new 10 b.test(5) { |i| p i } a = b.test(5) p a
50 60 70 80 90 100 [50, 60, 70, 80, 90, 100]