类的新实例或不同的东西?

时间:2012-07-09 07:02:31

标签: ruby

我在这里和那里看过像这样的代码

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

有人可以解释一下“do | s |”背后的想法是什么?

2 个答案:

答案 0 :(得分:0)

这是在ruby中使用块的示例。 Block是一块可以传递给方法的代码(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中的初始化程序会调用一个块(如果给出一个块)并传递一个参数。 Block然后可以接收该参数并完成其工作。

Educational reading此处。

答案 1 :(得分:0)

这是一个被Specification

的初始化程序暴露出来的参数

在那个课程中可能看起来像这样:

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

yield执行一个块并将一个参数传递给它 - self(它可能是任何其他对象,所以最好去检查源)

代码块通常如下所示:

do |arguments, list|
  # code here
end

但是参数是可选的(除非它是lambda,你会因为太少或太多而得到例外)

相关问题