Solidity

外部solidity函式可以在同一個合約中動態呼叫嗎?

  • April 28, 2022

假設我們有以下solidity合約:

contract khiar {
   function mooz(uint size) external {
       // do something with mooz!
   }

   function bademjoon(uint size) external {
       // do something with bademjoon and then call mooz
       address(this).call(abi.encodeWithSignature("mooz(uint)", size*2));
   }
}

如您所見,mooz它是一個外部函式,但我們需要bademjoon在同一合約的函式內動態呼叫它(無論出於何種原因)。這是一個有效的呼叫還是我們需要添加public修飾符mooz

這是一個有效的呼叫還是我們需要向 mooz 添加 public 修飾符?

這是一個有效的呼叫,但它是一個奇怪的案例。

你不需要添加public,事實上,你不能。它會觸發編譯器錯誤。請參閱有關功能可見性修飾符的文件:

公共函式是合約介面的一部分,可以在內部呼叫,也可以通過消息呼叫。

外部函式是合約介面的一部分,這意味著它們可以從其他合約和交易中呼叫。外部函式 f 不能在內部呼叫(即 f() 不起作用,但 this.f() 起作用)。

兩者不兼容,public 允許內部呼叫,而 external 不允許。

引用自:https://ethereum.stackexchange.com/questions/127107