2017-07-10 26 views
0
def add_one(number) 
    number + 1 
end 

puts add_one(5) 

def add_two(number) 
    number = add_one(number) 
    add_one(number) 
end 

puts add_two(3) 

你好。我完全理解第一種方法。但是,我現在試圖理解組合方法,就像我們從add_two方法中看到的那樣。我對第二種方法如何返回5感到無能爲力?如何組合這兩個方法返回值5?

據我所知,我們調用方法add_two並將數字'3'傳遞給參數。從那裏,我們得到一個局部變量的數字與對象3.從那裏我不明白我們如何包括add_one方法,當我們沒有定義它下面?有人能通過第二種方法來引導我嗎?

讓我來幫助你理解我的邏輯被打破了組件向下跌破:

first method: 

    add_one(5) 
    5 + 1 = 6 

second method: 

    add_two(3) 
    3 = number + 1 
    number + 1 

我說得對通過這樣的上述第二種方法的思考?

+1

因爲'add_one'是首先定義的,它可以用在'add_two'裏面 –

+0

不,我明白這個方法已經定義好了,所以我們可以在第二個方法中包含它。但是在最後一種方法中,這是如何產生值'5'的呢?我不明白這一點。 – Benjamints

+0

爲什麼不直接打印每一行並找出原因和發生的事情? – whodini9

回答

0

add_two方法,行number = add_one(number)覆蓋number中的值,結果爲add_one(number)

例如,當您撥打add_two(3),出現這種情況:

number = add_one(number) 
number = add_one(3) 
number = 4 

在您再次調用add_one第二線,但修改後的number,也就是說,它不再具有價值3現在是4,因爲它是在前面的線覆蓋。

因此第二行add_one(number)變成add_one(4),因此結果是5

+0

我很欣賞這個答覆。但是,我仍然不明白爲什麼我們必須將add_one(number)賦給第二行的變量'number'?因爲在該行下面,我們可以調用'add_one(number)',它通過添加+1而不將其分配給同一個變量來工作。 – Benjamints

+0

@Benjamints你用'add_two'方法試圖完成什麼?除非您打算稍後使用該變量,否則不需要爲任何變量添加「add_one(number)」。例如,如果您不將'add_one(number)'賦給'number',那麼您將永遠不會改變它的值,結果將是'4'而不是'5'。 – Gerry

0

您對第二個功能的解釋不正確。

second method: 

    add_two(number(3)) 
    number = number(3) + 1 #=> 4 
    number(4) + 1   #=> 5 

在第二函數的第一行被處理爲add_one(number) store result at number使得行後數是現在4不是3

第二行被處理爲add_one(number) and return result即5