为什么输出是我没有设置的东西

时间:2014-02-07 13:03:35

标签: ruby

在本书的代码中,有一个我没有使用的变量,它被设置为一个特定的值:

def secret_formula(started)
  jelly_beans = started * 500
  jars = jelly_beans / 1000
  crates = jars / 100
  return jelly_beans, jars, crates
end

start_point = 1000
bears, jars, cratesm = secret_formula(start_point)
puts bears
puts jars
puts cratesm

输出结果为:

500000
500
5

2 个答案:

答案 0 :(得分:3)

您的secret_formula方法返回3个值。

然后,您将这3个值分配到bears, jars, cratesm。不要对你在方法中调用变量的内容感到困惑 - 它们在这里无关紧要。

答案 1 :(得分:1)

请记住Ruby,函数中定义的变量(通常来说)不在函数外部。你所做的是定义了3个新的局部变量。这3个变量是函数定义的局部变量,一旦调用函数,它们就会消失得无影无踪。

功能结束返回 3 。这有助于记住。它没有返回你的3个变量 - 这些变量是本地的,并且即将消失。该函数返回3 。现在,无论谁调用该函数,都可以决定他们想要为变量分配3个返回值的名称。

因此,如果我们通过更改某些变量名来修改代码,那么这也可以起作用:

def secret_formula(started)
  jelly_beans = started * 500
  jars = jelly_beans / 1000
  crates = jars / 100
  return jelly_beans, jars, crates
end

start_point = 1000
milk, cartons, trucks = secret_formula(start_point)
puts milk
puts cartons
puts trucks

这是关于功能的好处。你真的不必知道内部发生了什么,或者它是如何工作的,甚至函数中的变量被命名为。你所需要的只是确信它的运行方式应该如此(尽管在函数旁边有一些好的文档会很好,这样你就可以知道它所期望的输入和你可以期望作为输出的东西了。)

这是另一个举例说明这一点......

def secret_formula(X)
  N = X * 500
  I = N / 1000
  Z = I / 100
  return N, I, Z
end

start_point = 1000
bears, jars, crates = secret_formula(start_point)
puts bears
puts jars
puts crates