-1

私はあちこちでこのようなコードを見てきました

Specification.new do |s|
  s.name = %q{casein}
  s.version = "3.1.11"
....

「do |s|」の背後にある考え方を誰か説明してもらえますか ?

4

2 に答える 2

0

これは 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化子はブロック (指定されている場合) を呼び出し、それにパラメーターを渡します。その後、ブロックはそのパラメーターを受け取り、その作業を行うことができます。

教育読書はこちら。

于 2012-07-09T07:09:05.090 に答える
0

の初期化子によってブロックに公開される引数ですSpecification

そのクラスでは、おそらく次のようになります。

class Specification
  def initialize
    # ...
    yield self
    # ...
  end
end

ブロックをyield実行し、単一の引数をそれに渡します- self(他のオブジェクトである可能性があるため、ソースを確認することをお勧めします)

通常、コード ブロックは次のようになります。

do |arguments, list|
  # code here
end

ただし、引数はオプションです(ラムダであり、少なすぎるか多すぎる場合に例外が発生する場合を除きます)

于 2012-07-09T07:09:16.623 に答える