中年engineerの独り言 - crumbjp

LinuxとApacheの憂鬱

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]

Rubyは独特

たまにRubyやると頭が切り替わらなくて困る・・・

手続き型言語
c , java , python , perl , ...
関数型言語
haskell , erlang , scala , lisp
Ruby
ruby !!

僕の中では世界は3つに分かれてて、こいつらを跨ぐ時には準備体操が必要。。
Javascriptも結構独特だけどコイツはあまり抵抗無いんだよなー
なんでだろ?