ruby - Ruby 中 Kernel#eval 和 Binding#eval 的区别

标签 ruby ruby-2.0

为什么 Binding#eval 会调用 block ,而 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

关于ruby - Ruby 中 Kernel#eval 和 Binding#eval 的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15645522/

相关文章:

javascript - 在嵌入式 Ruby 中使用 JavaScript 将变量作为参数传递

css - 在我的 Rails 应用程序中使用 Twitter Bootstrap,缺少标记

ruby - 多字节字符是否会干扰正则表达式中的结束行字符?

coffeescript - 安装 Coffee-script-source -v '1.6.3' 时捆绑安装抛出错误

Ruby 改进在 CI 服务器中不起作用

ruby-on-rails - Ruby 1.8.7(或 Rails 2.x)中的 String.force_encoding()

ruby - StringIO 实例改变原始字符串

ruby - 更快的 CSV + 试图找到独特的项目

ruby-on-rails - Heroku ruby​​ buildpack 错误 - 未定义的局部变量或方法 `install_language_pack_gems'

ruby-on-rails - ubuntu 12.04 ruby 2.0 rails : Could not find 'thread_safe'