2013-02-15 181 views
-1

爲什麼我不能只設置var = Class?爲什麼必須是var = Class.new?您可以在數組,散列,僅有var = [], {},"some_string"的字符串中設置變量。 Class是否做了一些特定的事情使它變得不同?爲什麼我必須聲明var = Class.new?

class Word 
    def palindrome(string) 
     string == string.reverse 
    end 
end 

w = Word.new 

puts w.palindrome("racecar") 
+0

我想'w = Word'只是將'w'設置爲類的引用,而不是類的實例。 – Blender 2013-02-15 04:14:52

+0

初始化/實例化? – Floris 2013-02-15 04:14:52

回答

2

其實,你已經得到了特殊情況下向後:

  • []Array.new
  • {}速記簡寫Hash.new
  • ""被簡寫String.new(排序的,因爲沒有語法結構沒有辦法指定一個字符串(例如",' ,或%)。

可以var = Klass,但分配varKlass,而Klass.new調用對象Klass(就像任何其他的方法調用,沒有什麼特別的話),它返回一個新實例上new方法Klass

注:我把它換成Class在你的問題與Klass(通過class Klass; end定義),以減少混亂,因爲談論ClassClass實例介紹了很多元的煩躁的,我不認爲你很關心在這裏,你只是打算Class代表任何類。

+0

我的代碼的問題是,如果我刪除.new然後我得到一個錯誤,說Word沒有定義。這對我來說沒有意義,因爲所有大寫的變量只應該是類變量。 – h00d13z 2013-02-15 08:37:24

+2

@ h00d13z:類變量以sigil('@@')開頭,不帶大寫字母。以大寫字母開頭的變量是常量,而不是類變量。 – 2013-02-15 09:58:03