Solidity

在 Solidity 中引用合約時語法正確嗎?

  • July 18, 2022

問題:

  1. 大寫

bet.sol中,為什麼它Game在作為參數getscoredifference()和條件傳遞給後續if語句時大寫,但在用於返回同一函式中的值時不大寫?

  1. ()

getscoredifference()of中Bet.sol,為什麼括號放在末尾game.team1Score()

  1. 類型轉換

Bet.sol建構子中,為什麼分配給game狀態變數的地址已經轉換Gamegame類型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();
       }
       }
  1. Game.Teams 指的是導入的 Game.sol 中的列舉 Teams,if 條件也是如此,而返回的遊戲是在建構子中使用 _address 啟動的對象
  2. 這是對在建構子中創建的遊戲對象的函式呼叫(返回公共 var 值)
  3. 同樣的事情,這裡的小寫遊戲是用_address發起的大寫遊戲合約的一個實例

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