2016-09-19 75 views
0

我已經有了,這是似乎是工作,但它是不是問題的關鍵...紅寶石簡單的類問題

class Person1 
    def initialize (name, surname, age) 
    @name = name 
    @surname = surname 
    @age = age 
    end 

    def introduction 
    p @name 
    p @surname 
    p @age 
    end 
end 

我把它叫做:

ken = Person1.new ("Ken", "Bolo", 4) 
ken.introduction 

,並有一個說法與編譯器有關我通過實例化我的對象的參數的數量。有了3,它告訴我我有很多,2它告訴我它太多了,1它告訴我它太少了!趕快行動吧!

在此先感謝。

+2

只需拆除Person1.new'和''之間的空間(「肯」,「大刀」,4)'或刪除括號:'Person1.new「Ken」,「Bolo」,4'。 –

+0

@CarySwoveland:初始化程序定義遭受同樣的問題 –

+1

永遠不要在方法名稱和左括號之間留出空格。請相信我們。後來你會知道爲什麼:) –

回答

3

只是刪除的方法名稱和括號之間的空白:

class Person1 
    def initialize(name, surname, age) 
    @name = name 
    @surname = surname 
    @age = age 
    end 

    def introduction 
    p @name 
    p @surname 
    p @age 
    end 
end 

ken = Person1.new("Ken", "Bolo", 4) 
ken.introduction 
#=> "Ken" 
#=> "Bolo" 
#=> 4 
+0

好的,spickermann,[球在你的球場](http://idioms.thefreedictionary.com/the+ball+is+in+court )。爲什麼在某些情況下允許空間而不是其他的? –

+0

簡單:它*是*允許的:例如,'foo.bar(a; b; c)'是非常好的。括號用於參數列表,參數列表(如果它們直接出現在消息發送之後)和分組,在這種情況下,它們將三個表達式組合在一起。在OP的情況下,分組表達式是「Ken」,「Bolo」,4',這根本不是句法上的合法表達。BTW:完全相同問題(和答案)已經在SO上多次發佈。大部分副本都有比這更好,更詳細的解釋。 –

+0

@JörgWMittag,似乎我介紹了一個紅色的鯡魚,注意'def初始化(姓名,年齡)'的第二個空格是可以的。當然沒關係 - 它是方法定義的一部分,而不是被調用的方法的參數。第二個空間是否允許,因爲它沒有引入歧義? –