【发布时间】:2013-03-26 19:14:53
【问题描述】:
为什么Binding#eval 调用块,而Kernel#eval 不调用?
def bar; binding; end
bi = bar {|x| p(x+1)}
bi.eval "yield 2" # ==> 3
eval "yield 2", binding # ==> LocalJumpError
【问题讨论】:
为什么Binding#eval 调用块,而Kernel#eval 不调用?
def bar; binding; end
bi = bar {|x| p(x+1)}
bi.eval "yield 2" # ==> 3
eval "yield 2", binding # ==> LocalJumpError
【问题讨论】:
我认为,在第五行,第二个参数必须是 'bi':
$ ruby -v
ruby 2.0.0p0 (2013-02-24 revision 39474) [x86_64-linux]
1 def bar; binding; end
2 bi = bar {|x| p(x+1)}
3
4 bi.eval "yield 2" #==> 3
5 eval "yield 2", bi #==> 3
【讨论】: