Solidity

Solidity 繼承無法正確讀取父級的值

  • December 3, 2018

我在契約中發現了一個奇怪的錯誤並試圖解決它,但這太不合理了。

contract parentContract {

   uint num = 1;

   function setNum(uint _n) public returns(uint) {
       num = _n;
       return num;
   }
   function getNum() public view returns(uint) {
       return num;
   }
}

import "./parentContract.sol"

contract childContract is parentContract {
   /* Same name but IDE don't report error
   *function getNum() public view returns(uint) {
   *    return num;
   *}   
   */

   function getNum2() public view returns(uint) {
       return num;
   }
   function getNum3() public view returns(uint) {
       return getNum();
   }
   function getNum4() public view returns(uint) {
       return parentContract.getNum();
   }
}

它們是兩個 .sol 文件中的簡單合約,用於測試。我希望getNum2()將返回numin parentContract,但它總是返回1我首先設置的。兩者getNum3()/getNum4()得到相同的結果getNum2()

我使用 truffle V4.1.14 進行部署。這是我在命令終端中與合約互動的程式碼。

parentContract.deployed().then(function(instance){return instance.setNum(2);});**//Set the num**
parentContract.deployed().then(function(instance){return instance.getNum();}).then(function(value){ return value.toNumber();});**//Get num in parentContract**
childContract.deployed().then(function(instance){return instance.getNum2();}).then(function(value){ return value.toNumber();});**//Get num through child**
childContract.deployed().then(function(instance){return instance.getNum2.call();}).then(function(value){ return value.toNumber();});**//Another method, use call() for testing, same with above.**`

parentContract.deployed()並且childContract.deployed()是兩個不同的實例。

你只打電話instance.setNum(2)給第一個實例。

所以num第二個實例中的值仍然存在1

instance.getNum2()返回該值。

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