4
A
回答
5
當變量而沒有聲明範圍前綴(@
- 例如,@@
- 類或$
- 全局)然後被聲明爲當前範圍,即:
class Foo
def boo
@boo ||= 'some value'
var ||= 40
puts "boo: #@boo var: #{var}"
end
def foo
var ||= 50
puts "boo: #@boo var: #{var}"
end
end
c = Foo.new
c.boo # => boo: some value var: 40
c.foo # => boo: some value var: 50
def foo
$var ||= 30
puts "$var: #$var"
end
foo # => $var: 30
puts "$var: #$var" # => $var: 30
%w[some words].each do |word|
lol = word # blocks introduce new scope
end
puts lol # => NameError: undefined local variable or method `lol'
for word in %w[some words]
lol = word # but for loop not
end
puts lol # => words
5
沒有@
當它運行的方法完成時,它被丟棄。
class Foo
def initialize
@bing = 123
zing = 456
end
def get_bing
@bing
end
def get_zing
zing
end
end
foo = Foo.new
foo.get_bing #=> 123
foo.get_zing #=> NameError: undefined local variable or method `zing' for #<Foo:0x10b535258 @bing=123>
這表明實例變量@bing
與該實例一起保存。它的值可以在該實例的任何方法中訪問。
但是一個局部變量zing
沒有被持久化(在大多數情況下),並且只要方法完成運行,任何局部變量都將被丟棄,並且不再可訪問。當運行get_zing
時,它會查找名爲zing
的本地變量或方法,但找不到一個,因爲initialize
中的zing
已過時。
0
它將成爲屬於本地詞彙範圍的局部變量。
Ex。
class Foo
def Bar
@fooz = 1
end
def Barz
fooz = 2
end
def test
puts @fooz
end
end
f = Foo.new
f.Bar
f.test
f.Barz
f.test
輸出:
1
1 #not 2
0
如果您使用名爲var2
的變量,它是本地的,並且僅在聲明構造的範圍內。即:
- 如果您在一個方法中聲明它,它將在該方法中是本地的。
- 如果您嘗試在類定義內但在任何方法外部聲明,則會引發NameError。例如:
class Foo bar = 2 end Foo.new NameError: undefined local variable or method 'bar'
相關問題
- 1. 函數中變量的JS可見性
- 2. rails中會話變量的可見性
- 3. Objective-C @implementation變量的可見性
- 4. 變量不可見
- 5. Perl的共享變量原子性和可見性
- 6. 壁紙可見性變化
- 7. jenkins - 變量不可見
- 8. 的Python 3:跨模塊的全局變量的可見性
- 9. Ruby字符串可變性
- 10. 回調函數中的變量可見性
- 11. Python - 導入模塊中全局變量的可見性
- 12. 關於Javascript中變量可見性的困惑
- 13. 中間變量在config.rb和頁面中的可見性
- 14. @synthesized實例變量的可見性是什麼?
- 15. 塊處理程序中變量的可見性(範圍)
- 16. 如何控制Java中變量的可見性?
- 17. Etherium中不同控制檯變量的可見性
- 18. 匿名類方法中的變量可見性
- 19. 改變文本的可見性android
- 20. 用JavaScript改變DIV的可見性
- 21. Three20中的物業可見性變化
- 22. Silverlight - 平滑的可見性變化
- 23. 計算法向量的可見性
- 24. 所有類都可見的變量Java
- 25. Ruby的變量
- 26. Ruby on Rails - 可變內部變量
- 27. 查看竊取可見性焦點,當變得可見
- 28. 如何使用webbrowser控件將div可見性變爲可見?
- 29. 實例方法中類成員變量可見性
- 30. 原子變量是否保證內存可見性?
你說的意思是 '如果我錯過@'? – boulder 2013-02-27 22:40:34
我的意思是,如果我創建了一個名爲「var2」的變量,而沒有@。 – OneZero 2013-02-27 22:41:13
您不要在Ruby中「聲明」變量... – meagar 2013-06-10 22:46:46