Solidity

呼叫超類外部函式

  • November 18, 2020

Solidity 中有沒有辦法呼叫超類外部函式?

通常使用繼承的合約,當覆蓋繼承的函式時,您也可以使用super.functionName().

使用external函式,在定義它們的合約中呼叫它們的唯一方法是使用this.functionName().

現在如果我想重寫一個繼承的外部函式並呼叫超類函式,如果可能的話,我將如何實現呢?

contract Foo {

   // I want to call this from the contract that inherits it
   function do() external virtual public {
        // nothing
   }
}

contract Bar is Foo {
   function do() external public override(Foo) {
       super.do() // TypeError: Member "do" not found or not visible after argument-dependent lookup in contract super Bar.

       this.do() // revert

       this.super.do() // Want to do something like this
   }
}

事實證明這是不可能的

繼承函式並嘗試呼叫父類版本被視為內部呼叫。由於覆蓋將替換被覆蓋函式的入口點,並且由於使用而無法訪問函式的邏輯(仍然存在於合約中)external,因此覆蓋外部函式並嘗試也使用它的父邏輯是不可能的。

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