下面的代码:订购输出
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
;还没有打印。
然后,当你到了最后一行时,参数print
首先是语句打印任何东西之前评估。第一个和最后一个参数是字符串文字。中间的说法是对的方法a
,这回99
然后打印前一个"Function 'a' called\n"
调用,print
语句开始这一切终于准备,现在每个参数进行了评估打印。
在将参数传递给方法之前,将对它们进行评估(以便您有要传递的值)。对功能a
的调用的评估具有印刷"function 'a' called
的副作用。这就是它首先被打印的原因。
首先,该方法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
。