我在这里和那里看到过这样的代码
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
但参数是可选的(除非它是 lambda 并且你会因为太少或太多而得到异常)