Solidity
如何將一個契約返回的值解析為另一個?
我部署了兩個契約一個是
UserRegistration
另一個是Exam
我有使用映射
getUser(uint id)
獲取特定使用者數據的方法,users
function getUser(uint _id) public constant returns(uint,string,string,uint,uint) { User memory c = users[_id]; return( c.id, c.name, c.class, c.age, c.pincode); }
現在,我有另一個契約
Exam
,我想getUser()
從契約中呼叫函式,UserRegistration
所以我已經這樣做了,pragma solidity 0.4.25; contract UserRegistration { function getUserCount() public returns(uint); function getUser(uint) public returns(uint,string,string,uint,uint); } contract Exam { address private addrUsr; uint public count; UserRegistration r; constructor(address _addrUsr) { addrUsr=_addrUsr; r = UserRegistration(addrUsr); } function updateCount() public { count=r.getUserCount(); } function getUserData(uint _id) public { //WHAT to do HERE//; } }
但是,如何將
getUser()
函式返回的值解析成getUserData()
這樣,如果我呼叫getUserData()
函式,它應該返回所有返回的值getUser()
,並且由於getUser()
函式返回的值是不同的數據類型,我不能將它們儲存在數組中。請幫我
我注意到您
constant
在系統資料庫中使用。如果這適用於您正在使用的編譯器,請堅持使用,否則view
適用於較新的編譯器。在任何情況下,都使用它:
您應該在兩個契約中添加
view
getter 函式。function getUserData(uint _id) public view returns (uint,string,string,uint,uint) { // or constant //WHAT to do HERE// uint id; string name; string class; uint age; uint pincode; (id, name, class, age, pincode) = r.getUser(_id); return(id, name, class, age, pincode); }
希望能幫助到你。