2016-09-19 2 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 мне говорят, что это слишком мало! Nuts!

Заранее спасибо.

+2

Просто удалить пробел между 'Person1.new' и' («Кен», «Боло», 4) 'или удалить скобки : 'Person1.new" Кен "," Боло ", 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

OK, spickermann, [мяч в вашем суде] (http://idioms.thefreedictionary.com/the+ball+is+in+court). Почему в некоторых ситуациях разрешено пространство, а не другие? –

+0

Easy: он * разрешен: 'foo.bar (a; b; c)' отлично подходит, например. Круглые скобки предназначены для списков параметров, списков аргументов (если они появляются непосредственно после отправки сообщения), и группировка в этом случае объединяет три выражения. В случае OP сгруппированное выражение представляет собой «Ken», «Bolo», 4', что просто не является синтаксически юридическое выражение. Кстати: это то же самое вопрос (и ответ) уже был опубликован несколько раз на SO. Большинство дубликатов имеют более подробные объяснения, чем этот. –

+0

@ JörgWMittag, похоже, я представил красную сельдь, заметив, что второе пространство в 'def initialize (name, surname, age)' было в порядке. Конечно, все в порядке - это часть определения метода, а не аргументы вызываемого метода. Разрешено ли это второе пространство, потому что оно не вводит никакой двусмысленности? –

Смежные вопросы