Solidity

混音警告 - 是恆定的,但可能不應該是。

  • April 18, 2022

我收到下面顯示的程式碼的警告。你能幫我解決這個警告嗎?

警告消息 - “是恆定的,但可能不應該是”

在此處輸入圖像描述

這裡討論了同樣的問題,但沒有得出任何結論。

我認為這是因為new創建變數時的關鍵字string abcde

我已經嘗試了兩個範例契約進行確認。

pragma solidity ^0.4.24;

contract Foo {
   uint256 n = 10;
   function initArray() public view  {
       uint[10*10] memory result;
       for (uint i = 0; i < n; i++){
          for(uint j = 0; j < n; j++){
               result[(i*9)+j]=1; 
           }
       }

   }
}

對於上述智能合約,remix 不會拋出警告Is constant but potentially should not be

pragma solidity ^0.4.24;

contract Foo {
   uint256 n = 10;
   function initArray() public view  {
       uint[] memory result = new uint[](n*n);
       for (uint i = 0; i < n; i++){
          for(uint j = 0; j < n; j++){
               result[(i*9)+j]=1; 
           }
       }

   }
}

但是,對於上述契約 remix 會引發警告: Is constant but potentially should not be.

該函式寫入在babcde[]別處定義的狀態變數。由於它寫入狀態,只讀pure修飾符可能是錯誤的。

希望能幫助到你。

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