Instance_eval不适用于do/end块,仅适用于{} -blocks

Ale*_*pov 3 ruby instance-eval

如果我有课:

class KlassWithSecret
  def initialize
    @secret = 99
  end
end
Run Code Online (Sandbox Code Playgroud)

并运行:

puts KlassWithSecret.new.instance_eval { @secret }
Run Code Online (Sandbox Code Playgroud)

它打印99,但如果我运行:

puts KlassWithSecret.new.instance_eval do
  @secret
end
Run Code Online (Sandbox Code Playgroud)

它返回一个错误: `instance_eval': wrong number of arguments (0 for 1..3) (ArgumentError)

为什么我不能使用do/end块instance_eval

PS我正在使用Ruby 2.1.0.

Dav*_*ric 5

puts括号中提供的表达式因为do..end块的优先级较低.

puts( KlassWithSecret.new.instance_eval do
  @secret
end )
Run Code Online (Sandbox Code Playgroud)

或使用块的大括号语法

puts KlassWithSecret.new.instance_eval {
  @secret
}
Run Code Online (Sandbox Code Playgroud)


归档时间:

查看次数:

419 次

最近记录:

11 年,10 月 前