作爲一個初學者我有一種簡單的問題,在Lua表功能甚至被稱爲:爲什麼如果它不選擇
a = function()
print("hello")
end
b = {125, 116, a()}
print(b[1])
應該只打印125
,而且打印hello
過。即使沒有選擇表格值。
作爲一個初學者我有一種簡單的問題,在Lua表功能甚至被稱爲:爲什麼如果它不選擇
a = function()
print("hello")
end
b = {125, 116, a()}
print(b[1])
應該只打印125
,而且打印hello
過。即使沒有選擇表格值。
刪除括號應該得到它的工作:(live @ codepad.org):
a = function()
print("hello")
end
--[[ Previous code:
'a()' will execute the function 'a' and will evaluate to its return value
b = {125, 116, a()}
]]
-- a is now a reference to the function (you could execute it by using: 'b[3]()')
b = {125, 116, a}
print(b[1])
否則,你有三個值填寫表格:
125,
和函數的返回值呼叫'a()'。
書面,你已經創建了分配給a
不帶參數並沒有返回功能;它有打印「你好」的副作用。
然後,您創建存儲在b
表中有三個表達式:b[1]
和b[2]
是數字,b[3]
是調用存儲在a
的功能,這將是由通常的規則通過浸軋調整到一個值的結果根據nil
的要求。所以b
將是一個只包含兩個條目的表格,兩個數字。但是,在創建b
的值時調用了a()
,該值打印出「hello」。
最後,您可以撥打print(b[1])
打印預期號碼。
這完全解釋了您看到的輸出。由於這可能不是您期望看到的輸出,因此您可以通過多種方式解決此問題。
例如,聲明a
返回「hello」而不是調用print。
a = function() return "hello" end
然後調用它,而構建存儲在b
將不再打印表,b
將獲得第三個元素,字符串「hello」。
或者,您可以通過忽略導致其被調用的圓括號來存儲寫入b
的函數。
b = {125, 116, a}
此外,b
保持一個表,該表是三個元素的序列。在這種情況下,b[3]
是打印「hello」的功能。
您選擇的操作完全取決於您對b
表中存儲的值的預期用途。