下面的代碼:訂購輸出
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
。