私はあちこちでこのようなコードを見てきました
Specification.new do |s|
s.name = %q{casein}
s.version = "3.1.11"
....
「do |s|」の背後にある考え方を誰か説明してもらえますか ?
私はあちこちでこのようなコードを見てきました
Specification.new do |s|
s.name = %q{casein}
s.version = "3.1.11"
....
「do |s|」の背後にある考え方を誰か説明してもらえますか ?
これは ruby でブロックを使用する例です。ブロックは、メソッドに渡すことができるコードの塊です (new
は単なる通常のメソッドです)。
class Foo
def initialize
puts "doing some work"
yield('Foo') if block_given?
end
end
Foo.new do |s|
puts "output from #{s}"
end
# >> doing some work
# >> output from Foo
ここで、初期Foo
化子はブロック (指定されている場合) を呼び出し、それにパラメーターを渡します。その後、ブロックはそのパラメーターを受け取り、その作業を行うことができます。
教育読書はこちら。
の初期化子によってブロックに公開される引数ですSpecification
そのクラスでは、おそらく次のようになります。
class Specification
def initialize
# ...
yield self
# ...
end
end
ブロックをyield
実行し、単一の引数をそれに渡します- self
(他のオブジェクトである可能性があるため、ソースを確認することをお勧めします)
通常、コード ブロックは次のようになります。
do |arguments, list|
# code here
end
ただし、引数はオプションです(ラムダであり、少なすぎるか多すぎる場合に例外が発生する場合を除きます)