如何组合这两个方法返回值5?

时间:2017-07-10 19:55:44

标签: ruby

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无能为力?

据我所知,我们将方法称为add_two并传递数字' 3'进入论证。从那里我们得到一个带有对象3的局部变量号。从那里我不明白我们如何在我们还没有在下面定义它时包含add_one方法?有人可以引导我完成第二种方法吗?

让我通过打破下面的组件来帮助您理解我的逻辑:

first method: 

    add_one(5)
    5 + 1 = 6

second method:

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

考虑到上面这样的第二种方法,我是对的吗?

2 个答案:

答案 0 :(得分: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

答案 1 :(得分: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