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. OCILib - 變量的可見性
- 2. 父類中類變量的可見性
- 3. rails中會話變量的可見性
- 4. Objective-C @implementation變量的可見性
- 5. 函數中變量的JS可見性
- 6. MPI中變量的可見性
- 7. 實例化對象變量可見性
- 8. 線程終止時變量可見性
- 9. Asmx私有變量可見性
- 10. 變量不可見
- 11. 改變div的可見性
- 12. Ruby打印當前的可見性
- 13. Perl的共享變量原子性和可見性
- 14. 壁紙可見性變化
- 15. jenkins - 變量不可見
- 16. C++ extern變量不可見
- 17. Ruby的Haml的可變變量
- 18. 的Python 3:跨模塊的全局變量的可見性
- 19. Ruby字符串可變性
- 20. Java實例變量的可見性(ThreadLocal的)
- 21. @synthesized實例變量的可見性是什麼?
- 22. 可見性div通過2個變量,不同的開/關
- 23. 回調函數中的變量可見性
- 24. 匿名類方法中的變量可見性
- 25. 這段代碼中的變量可見性錯誤是什麼?
- 26. 中間變量在config.rb和頁面中的可見性
- 27. 混淆java線程變量的可見性
- 28. Etherium中不同控制檯變量的可見性
- 29. 塊處理程序中變量的可見性(範圍)
- 30. 如何控制Java中變量的可見性?
你說的意思是 '如果我錯過@'? – boulder 2013-02-27 22:40:34
我的意思是,如果我創建了一個名爲「var2」的變量,而沒有@。 – OneZero 2013-02-27 22:41:13
您不要在Ruby中「聲明」變量... – meagar 2013-06-10 22:46:46