2015-08-22 2 views
-2

Я пытаюсь понять метод initialize, но у меня возникают проблемы с использованием скобок. В следующих примерах: from here, они не используют «apple» и «ripe» в скобках, но во втором примере они используют только (k). Как мы знаем, в каких случаях использовать скобки или нет?Ruby инициализировать метод, когда использовать скобки

class Fruit 
    def initialize 
     @kind = "apple" 
     @condition = "ripe" 
    end 
end 

class Fruit 
    def initialize(k) 
    @kind = k 
    @condition = "ripe" 
    end 
end 
+2

'' apple "и' "ripe" 'являются строковыми литералами, тогда как' k' является параметром. Скобки являются необязательными, если не определены параметры. – jonrsharpe

+1

Если вы хотите, чтобы избежать downvotes, не задавайте вопросы, на которые отвечают в первых нескольких главах любой наполовину достойный тур. – jonrsharpe

+0

@johrsharpe вы работаете с ошибочным предположением, что я не исследовал вопрос. Я сделал, я не нашел ответа на свой вопрос, или я не понял ответов, которые привели меня сюда. Удивительно то, что, когда люди могут сползать с полной анонимностью, они делают это безрассудно, но когда они получают отдачу, они прибегают к высокомериям и ошибочным предположениям. – Padawan

ответ

3

В вашем втором примере скобки используются, чтобы приложить список аргументов метода initialize.

def initialize 
    @kind = "apple" 
    @condition = "ripe" 
end 

не имеет параметров. "apple" и "ripe" являются строковыми литералами. Вы можете использовать круглые скобки, если хотите, но они опускаются по соглашению. Этот код эквивалентен:

def initialize() #no parameters 
    @kind = "apple" 
    @condition = "ripe" 
end 

, но круглые скобки, содержащие пустой список параметров, просто сокращаются для краткости.

В вашем втором примере:

def initialize(k) 
    @kind = k 
    @condition = "ripe" 
end 

@kind инициализируется значением параметра k.

Метод без параметров initialize будет использоваться, когда вы позвоните Fruit.new. Чтобы использовать один из второго примера, вам необходимо указать значение для параметра k при создании объекта, Fruit.new("apple")

+0

Это помогает мне понять многое из того, что происходит. Спасибо. – Padawan

2

Это просто. Если вам нужно, например, сказать, установить некоторые значения по умолчанию для некоторых переменных в методе инициализации класса, вам не нужно вообще использовать скобки, достаточно просто установить значения для ваших переменных в этот метод. Это именно то, что они делают в:

def initialize 
|  @kind = "apple" 
|  @condition = "ripe" 
| end 

Например, если вам необходимо установить пользовательское значение для одного или нескольких из своих переменных, вы, возможно, придется использовать круглые скобки, чтобы передать свои собственные значения в качестве параметров в вашем создании объекта вызов, как делать в (вы можете использовать столько переменных в круглые скобки как пользовательские значения, которые вы хотите отправить):

def initialize(k) 
|  @kind = k 
|  @condition = "ripe" 
| end 

Таким образом, вы создаете объект, как:

Fruit.new your_custom_value_or_object 

вы можете установить Значение по умолчанию для ваших параметров в методе инициализатора скобках в случае, если вы не проходите какой-либо параметр, который является именно то, что они делают в:

def initialize(k="apple") 
|  @kind = k 
|  @condition = "ripe" 
| end 

Если вы не передать какой-либо параметр при создании объекта, то @kind будет установлено значение «яблоко».

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