[英]Passing argument to lua function after evaluating function in string
我有函數process
和matrix
。 以下代碼有效
process(matrix({{2,4,6},{8,10,12},{14,16,20}}))
但是以下不起作用。
n='matrix({{2,4,6},{8,10,12},{14,16,20}})'
process(n)
它會引發一些錯誤。 原因很明顯,進程將n
作為string
而不是函數matrix
的輸出。 因此,這里所涉及的基本困難是關於evaluating
從變量字符串n
,然后把它作為參數傳遞給函數process
。 這里的loadstring
函數沒有用,因為matrix
是local函數,不能從loadstring
。 這有什么工作嗎? 我希望我在這里明確說明了這個問題。 它是關於評估(或卸載)字符串然后將其作為參數傳遞給另一個函數。 任何幫助將不勝感激。 謝謝。
因為
matrix
是局部函數
Lua 認真對待 local
聲明。 如果變量被聲明為local
,則只能通過靜態在該變量的本地范圍內的代碼來訪問它。 您稍后轉換為代碼的字符串在本地范圍內不是靜態的,因此無法訪問local
變量。
現在,使用Lua 5.2+,您可以為load
提供第二個參數,該表表示將構建Lua塊的全局環境。 如果該表包含matrix
值,則加載的字符串可以訪問它。 對於Lua 5.1,您必須在返回的函數上使用setfenv
來load
以實現類似的效果。 Lua 5.2+方法看起來像這樣:
local env = {matrix = matrix}
local func = load("return matrix({{2,4,6},{8,10,12},{14,16,20}})", nil, "t", env)
process(func())
請注意以下事項:
您必須創建一個顯式表,這是一個全局環境。 沒有什么可以通過的說“讓我的當地人可用”; 你必須把你想去的每個地方都放在那里。 一般來說,這就是為什么將這些東西作為參數傳遞或者只是將它們作為全局變量。
如果要獲取對matrix
的調用結果,則明確需要"return "
。
你必須調用該函數。 函數是Lua中的值,因此您可以自由地傳遞它們。 但是如果你想將函數的結果傳遞給另一個函數,你必須實際調用它。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.