下面的代码:
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。