Solidity
在 Solidity 中引用合約時語法正確嗎?
問題:
- 大寫
在
bet.sol
中,為什麼它Game
在作為參數getscoredifference()
和條件傳遞給後續if
語句時大寫,但在用於返回同一函式中的值時不大寫?
()
在
getscoredifference()
of中Bet.sol
,為什麼括號放在末尾game.team1Score()
?
- 類型轉換
在
Bet.sol
建構子中,為什麼分配給game
狀態變數的地址已經轉換Game
為game
類型Game
?遊戲.sol
// SPDX-License-Identifier: MIT pragma solidity ^0.8.4; contract Game { int public team1Score; int public team2Score; enum Teams { Team1, Team2 } function addScore(Teams teamNumber) external { if(teamNumber == Teams.Team1) { team1Score++; } else { team2Score++; } } }
貝特索爾
pragma solidity ^0.8.4; import "./Game.sol"; contract Bet { Game game; constructor(address _address) { game = Game(_address); } function getScoreDifference(Game.Teams _team) public view returns(int) { if(_team == Game.Teams.Team1) { return game.team1Score() - game.team2Score(); } else if(_team == Game.Teams.Team2) { return game.team2Score() - game.team1Score(); } }
- Game.Teams 指的是導入的 Game.sol 中的列舉 Teams,if 條件也是如此,而返回的遊戲是在建構子中使用 _address 啟動的對象
- 這是對在建構子中創建的遊戲對象的函式呼叫(返回公共 var 值)
- 同樣的事情,這裡的小寫遊戲是用_address發起的大寫遊戲合約的一個實例