首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Ruby中的块绑定

Ruby中的块绑定
EN

Stack Overflow用户
提问于 2010-07-18 13:34:49
回答 2查看 2.6K关注 0票数 2

我被ruby中块绑定的定义弄糊涂了。这里有两个示例:

代码语言:javascript
复制
def redfine_a(&block)
  a = 2
  puts eval("a", block.binding)
  block.call
end
a = "hello"
puts redfine_a {a}

这一个可以运行预期的结果,而第二个:

代码语言:javascript
复制
def redefine_a(&block)
  a= 2
  puts eval("a", block.binding)
  block.call
end

puts redefine_a{a= "hello"}

会抱怨:

代码语言:javascript
复制
undefined local variable or method `a' for main:Object (NameError)

在我删除puts eval("a", block.binding)之后,我的代码运行:

代码语言:javascript
复制
def redefine_a(&block)
  a= 2
  block.call
end

puts redefine_a{a= "hello"}

我哪里错了?

EN

回答 2

Stack Overflow用户

发布于 2010-07-18 13:41:53

block.binding是在块运行之前定义它的环境。

票数 9
EN

Stack Overflow用户

发布于 2010-07-18 20:45:28

在您的代码中,定义块的上下文是main对象,因此eval("a", block.binding)行将在main中返回a的值。在你的第一个例子中,a是在main中定义的,所以代码会运行,在第二个例子中,main中没有a,所以出现了错误。

不过,在这两种情况下,redefine_a方法中的a=2都不会有任何影响。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3274443

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档