從我所瞭解的情況來看,在Ruby類變量中,前面帶有@@
,而實例變量前面帶有@
。但是,如果它們是在一個班級體內定義的,而沒有被任何東西佔先,這意味着什麼?在Ruby類中定義的普通變量是什麼意思?
class MyClass
some_var = 'hello'
end
some_var
在這種情況下指的是什麼?
從我所瞭解的情況來看,在Ruby類變量中,前面帶有@@
,而實例變量前面帶有@
。但是,如果它們是在一個班級體內定義的,而沒有被任何東西佔先,這意味着什麼?在Ruby類中定義的普通變量是什麼意思?
class MyClass
some_var = 'hello'
end
some_var
在這種情況下指的是什麼?
這是一個局部變量。請參閱有關「Local variables」的官方文檔。
當在類的範圍內聲明局部變量時,只要加載類就會得到評估。嘗試運行此:
class MyClass
bad_idea = 1/0
def initialize
puts "this is silly #{bad_idea}"
end
end
puts "I told you this wouldn't work!"
你會得到一個ZeroDivisionError: divided by 0
和"I told you this wouldn't work!"
永遠不會打印。
可能的重複http://stackoverflow.com/questions/23438728/ruby-instance-variables-or-local-variables – brito
@brito我不這麼認爲...它共享一些信息,但這是一個非常具體的問題,並可能產生更深入的答案。 – Ninigi
'some_var'是一個局部變量(局部於'MyClass'類)。想要證明?將'puts binding.local_variables'添加爲類定義的最後一行。執行'end'後,它會打印''some_var''。 (請參閱[內核#綁定](http://ruby-doc.org/core-2.2.0/Kernel.html#method-i-binding)。)請注意,類MyClass的實例不會看到'some_var '。 –