5

下面的代码:

def a
  print "Function 'a' called\n"
  99
end

print "a=", a, "\n"

产生:

Function 'a' called
a=99

为什么function 'a' called先显示?我希望a=首先出现。

4

4 回答 4

11

在将参数传递给方法之前,会对它们进行评估(以便您有要传递的值)。对函数调用的评估a具有打印的副作用"function 'a' called。这就是为什么它首先被打印出来。

于 2013-07-10T09:36:18.480 回答
8

首先,你定义方法a;还没有打印任何内容。

然后,当您到达最后一行时,print在该语句打印任何内容之前首先评估 to 的参数。第一个和最后一个参数是字符串文字。中间的参数是对方法的调用,它在返回 99 之前a打印。"Function 'a' called\n"

然后,print开始这一切的语句终于可以打印了,因为它的每个参数都已被评估。

于 2013-07-10T09:37:27.657 回答
3

首先,该方法a被完全执行,包括print "Function 'a' called\n". 只有在方法返回之后,才能执行99该行。print "a=", a, "\n"

可以这样想:a需要知道的返回值才能在最后一行打印。

于 2013-07-10T09:36:42.853 回答
1

该声明

print "a=", a, "\n"

被处理为

print("a=", a(), "\n")

所以调用的所有参数都print必须在调用之前进行评估。这意味着先打电话a

如果语句a=要先输出,在调用 之前a(),它必须包含对 的三个单独调用print

于 2013-07-10T11:06:39.153 回答