【问题标题】:difference between Kernel#eval and Binding#eval in RubyRuby 中 Kernel#eval 和 Binding#eval 的区别
【发布时间】: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

【问题讨论】:

    标签: ruby ruby-2.0


    【解决方案1】:

    我认为,在第五行,第二个参数必须是 '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
    

    【讨论】:

    • 您是如何配置 IRB 的?我看到您将行号放入其中。配置相同的任何帮助? :)
    • 我没有配置irb,我只是在评论中添加了行号,以便更好地理解:)
    • 哦!我认为它是自动的:)
    猜你喜欢
    • 2015-11-10
    • 1970-01-01
    • 2018-12-15
    • 2014-03-26
    • 1970-01-01
    • 1970-01-01
    • 2010-12-20
    • 2010-09-20
    • 2011-01-14
    相关资源
    最近更新 更多