-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

但参数是可选的(除非它是 lambda 并且你会因为太少或太多而得到异常)

于 2012-07-09T07:09:16.623 回答