【发布时间】:2017-03-24 03:42:04
【问题描述】:
是否可以从GetVar.print_foo 访问foo?
foo = "test"
module GetVar
def self.print_foo
puts foo
end
end
GetVar.print_foo
我可以通过将 foo 更改为常量 FOO 来使其工作,但这更像是一种 hack,我正在寻找更好的解决方案。我也不能,或者宁愿不让foo 成为实例变量@foo。
【问题讨论】:
-
您可以在模块中添加
def self.foo; "test"; end。 -
@CarySwoveland 不,这是因为我没有定义 foo - 实际上是“verify_recaptcha”,它来自另一个宝石。我正在使用 recaptcha gem,我正在尝试创建一个调用
verify_recaptcha的辅助方法,但是辅助函数创建了一个新范围,它没有我需要从 recaptcha gem 获得的功能。 -
@ChristianJuth 局部变量对于当前对方法的调用是本地的,或者如果您在顶级绑定中定义,则对于顶级绑定是本地的。它不能也不应该在其他任何地方访问。
-
@ChristianJuth 你的问题听起来像是一个设计问题,所以你能问另一个关于你真正问题的问题吗?
-
@ChristianJuth :从技术上讲,您可以将 foo 设为全局变量 (
$foo),但除非您有充分的理由这样做,否则不要这样做。正如 Aetherus 所说,这对我来说更像是一个设计问题。