2016-04-29 36 views
4

具體來說,就是有(從setupvalue返回名字的事實除外)之間的區別:setupvalue和upvaluejoin是否可以互換(lua調試庫)?

debug.setupvalue(f, up, val) 

而且

debug.upvaluejoin(f, up, function() return val end, 1) 

(與VAL本地)

之間或者:

debug.upvaluejoin(f1, n1, f2, n2) 

And

debug.setupvalue(f1, n1, select(2, debug.getupvalue(f2, n2))) 

我的印象是upvaluejoin增加了一些魔力,但一些測試表明否則。

剛剛加入一些糖以緩解功能重複等等?

+1

'upvaluejoin'在兩個upvalues之間創建一個「等價鏈接」(當然,銷燬已經存在的鏈接)。 'setupvalue'不會創建或中斷任何鏈接。 –

回答

2

debug.setupvalue(f, up, value)value與功能f

whereas debug.upvaluejoin(f1, n1, f2, n2)的ID up的的upvalue指的f1n1個的upvalue到f2

n2個的upvalue所以實際上它們是完全不同的事情,不只是一些糖。

在某些情況下,您可以達到相同的結果,但它們絕對不是相同或可以互換。

+0

因此,如果後者改變了f2引用的值,它將改變f1的值,並且setupvalue不會改變,如果它們不是「加入」(我想說引用相同的閉包,但我不知道這是否正確)? 更重要的是,setupvalue是否也會更改可能引用該值的任何其他函數/塊的值? – 4xel

相關問題