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.
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 次 |
| 最近记录: |