下面的代码:
def a
print "Function 'a' called\n"
99
end
print "a=", a, "\n"
产生:
Function 'a' called
a=99
为什么function 'a' called
先显示?我希望a=
首先出现。
下面的代码:
def a
print "Function 'a' called\n"
99
end
print "a=", a, "\n"
产生:
Function 'a' called
a=99
为什么function 'a' called
先显示?我希望a=
首先出现。
在将参数传递给方法之前,会对它们进行评估(以便您有要传递的值)。对函数调用的评估a
具有打印的副作用"function 'a' called
。这就是为什么它首先被打印出来。
首先,你定义方法a
;还没有打印任何内容。
然后,当您到达最后一行时,print
在该语句打印任何内容之前首先评估 to 的参数。第一个和最后一个参数是字符串文字。中间的参数是对方法的调用,它在返回 99 之前a
打印。"Function 'a' called\n"
然后,print
开始这一切的语句终于可以打印了,因为它的每个参数都已被评估。
首先,该方法a
被完全执行,包括print "Function 'a' called\n"
. 只有在方法返回之后,才能执行99
该行。print "a=", a, "\n"
可以这样想:a
需要知道的返回值才能在最后一行打印。
该声明
print "a=", a, "\n"
被处理为
print("a=", a(), "\n")
所以调用的所有参数都print
必须在调用之前进行评估。这意味着先打电话a
。
如果语句a=
要先输出,在调用 之前a()
,它必须包含对 的三个单独调用print
。