2012-03-17 57 views
0

将变量隐藏在Ruby文件中的最佳做法是什么,就像JavaScript中的(function(){})()闭包的等价物一样?在Ruby中隐藏变量

所以,如果我有一个文件:

foo = 5 
bar = foo * foo 

我只是想揭露吧,不是foo,当有人需要它。

+5

Ruby是面向对象的。使用类。 – 2012-03-17 14:18:33

回答

6

如果您有包含这两行的文件,并且某人需要该文件,则两个变量都不会公开。即使文件出现在全局范围内,本地变量仍然是本地文件。

如果要公开bar,你需要把它变成一个全局变量$bar或者,如果你不打算为要改变的变量,为一个常数Bar。通过不对foo做同样的事情,它将自动不被暴露。

你也可以考虑把整个东西包装在模块或类中。

1

Ruby的范围与许多其他语言一样。变量首次被使用时会被声明,并且会根据它们被声明的位置来确定范围。如果您使用本地的功能:

def do_something 
    foo = 5 
    foo * foo 
end 

puts do_something 

这将打印25,但foo将不会是do_something功能外可用。

这是你在找什么?

本文将更深入地讨论Ruby的范围界限Ruby Scoping Rules

+0

其实我会用这个变体,foo = lambda {...} .call,虽然我很欣赏有关使用类的更强大的解决方案的评论。 – mahemoff 2012-03-17 14:39:04