Solidity
呼叫超類外部函式
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
,因此覆蓋外部函式並嘗試也使用它的父邏輯是不可能的。