Ruby   发布时间:2022-04-03  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了为什么我不能在Ruby中的方法中访问局部变量?大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
我有一个名为test.rb的Ruby文件
ff="ff"
def test
  puts ff
end

我执行它,得到错误:

test.rb:3:在`test’中:未定义的局部变量或方法`ff’for main:Object(NameError)

这是什么原因?有没有文件可以解释它?

解决方法

在测试方法定义中ff无法访问的原因很简单,方法(使用def关键字创建)创建了一个新范围.与分别使用类和模块关键字定义类和模块相同. @H_603_4@main(顶级对象)的角色几乎完全与这种情况下的范围问题无关.

请注意,如果您希望测试方法可以访问定义上下文中定义的locals,那么请使用define_method(或者在您的情况下,使用define_singleton_method方法),请参阅此处:

ff = "hi"
define_singleton_method("test") { ff }
test #=> "hi"

与def关键字不同,define_method方法系列不会创建新范围,而是关闭当前范围,捕获任何局部变量.

在@soup给出的下一个例子中使用@ff的原因并不是主要在某种程度上是一个“特殊情况”,只是在顶层定义的ivar是一个主要的ivar,因此可以访问调用的方法主要.

然而,测试方法与主要的关系是什么?它不仅仅是main本身的方法 – 它实际上是在Object类上定义的私有实例方法.这意味着测试方法几乎可用于ruby程序中的每个对象(作为私有方法).在顶级(main)定义的所有方法实际上都定义为Object类上的私有实例方法.

有关Ruby顶级的更多信息,请参阅此文章:http://banisterfiend.wordpress.com/2010/11/23/what-is-the-ruby-top-level/

大佬总结

以上是大佬教程为你收集整理的为什么我不能在Ruby中的方法中访问局部变量?全部内容,希望文章能够帮你解决为什么我不能在Ruby中的方法中访问局部变量?所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。