Solidity
在 Solidity 中將函式作為參數傳遞
你可以在 Solidity 中將函式作為參數傳遞嗎?
*我的猜測:*在 Solidity中有一個概念
address
,但它們代表contract
s。合約可以有備份功能,但我認為你不能給它們參數。考慮像在 C 中那樣通過地址將函式作為參數傳遞。是否有一種將函式作為參數傳遞的合法方法,或者如果沒有,是否有一種 hacky 方法?
如果有,怎麼做?如果沒有,為什麼不呢?
函式(又名方法)由 ABI 指定,並具有方法 ID,即方法簽名的 sha3 (Keccak-256) 的前 4 個字節。
someFunction
這是呼叫on的範例contract
:contract.call(bytes4(sha3("someFunction()")))
這是一個經過測試的函式,將 a
methodId
作為參數傳遞:contract C1 { uint public _n; // public just for easy inspection in Solidity Browser function foo(uint n) returns(uint) { _n = n; return _n; } function invoke(bytes4 methodId, uint n) returns(bool) { return this.call(methodId, n); } }
在 Solidity 瀏覽器中使用
"0x2fbebd38", 9
as 的參數對其進行測試invoke
,然後查看_n
等於9
。筆記:
0x2fbebd38
是bytes4(sha3("foo(uint256)"))
(不要忘記使用規範類型的需要,在這種情況下uint256
,根據ABI。)- >
call 和 callcode 的返回值是布爾值,呼叫成功或呼叫失敗。不可能從呼叫中返回值,因為這需要合約事先知道返回類型。