2015-08-22 84 views
-2

我想了解初始化方法,但在使用括號時遇到了問題。在下面的例子中,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

如果您想避免降價,請不要提問在任何半途體面的前幾章中回答的問題。 – 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的值。

當您撥打Fruit.new時,將使用無參數initialize方法。要使用第二個示例中的一個,創建對象時需要爲參數k提供值,Fruit.new("apple")

+0

這有助於我理解發生了什麼事情。謝謝。 – Padawan

2

這很簡單。例如,如果需要,可以說,在類的初始化方法中爲某些變量設置一些默認值,則根本不需要使用括號,只需將值設置爲方法中的變量就足夠了。這正是他們在做什麼:

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

舉例來說,如果你需要一個自定義的值設置爲一個或一個以上的變量,你可能需要使用括號來傳遞您的自定義值作爲你的對象創建參數調用,如(你想送您可以使用盡可能多的變量進入括號爲自定義值)在做:

​​

所以,你創建了對象:

Fruit.new your_custom_value_or_object 

您可以設置默認值在情況下,你初始化方法括號您的參數不傳遞任何參數,這是他們在做什麼:

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

如果你沒有當你創建對象,然後傳遞任何參數@kind將被設置爲「蘋果」。