2012-03-17 55 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