簡體   English   中英

在對字符串中的函數進行求值后,將參數傳遞給lua函數

[英]Passing argument to lua function after evaluating function in string

我有函數processmatrix 以下代碼有效

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,您必須在返回的函數上使用setfenvload以實現類似的效果。 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM