在一个街区内绑定

时间:2014-06-27 10:26:18

标签: ruby binding block

我想在方法initialize中使用一个块。使用此代码:

class Settlement
  attr_reader :url, :parameters
  def initialize(&block)
    instance_eval block.call
  end
  def parameters(x) ; @parameters = x; end
  def url(x) ; @url = x;  end
end

settlement = Settlement.new do
  url "https://xxxxx"
  parameters("ffff")
end

我收到以下错误消息:

  

NoMethodError - 未定义的方法参数

有什么想法吗?

1 个答案:

答案 0 :(得分:2)

当您致电instance_eval block.call block.call时,会在 instance_eval被调用之前评估。这意味着在没有实例绑定的情况下调用块。

这应该有效:

def initialize(&block)
  instance_eval &block
end