2015-09-25 86 views
1

從我所瞭解的情況來看,在Ruby類變量中,前面帶有@@,而實例變量前面帶有@。但是,如果它們是在一個班級體內定義的,而沒有被任何東西佔先,這意味着什麼?在Ruby類中定義的普通變量是什麼意思?

class MyClass 
    some_var = 'hello' 
end 

some_var在這種情況下指的是什麼?

+0

可能的重複http://stackoverflow.com/questions/23438728/ruby-instance-variables-or-local-variables – brito

+0

@brito我不這麼認爲...它共享一些信息,但這是一個非常具體的問題,並可能產生更深入的答案。 – Ninigi

+0

'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 '。 –

回答

0

這是一個局部變量。請參閱有關「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!"永遠不會打印。

+0

謝謝,現在我感到很蠢,哈哈。但是什麼時候得到評估?課程本身是什麼時候創建的? –

+0

我認爲你的問題相當有趣...... Ruby中的類與Java中的類不同。一個類是一個存儲在一個常量中的對象,這意味着它可以在運行時更改。我不知道你的示例將如何表現(比如,你可以在運行時以任何方式更改該變量嗎?),但是我想在加載時知道 – Ninigi

+0

@AmrNoman。我添加了一些代碼作爲例子。 – brito