Solidity
Solidity 繼承無法正確讀取父級的值
我在契約中發現了一個奇怪的錯誤並試圖解決它,但這太不合理了。
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()
將返回num
inparentContract
,但它總是返回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()
返回該值。