2017-07-10 28 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