solidity中資料型別分類為下面兩大類:
值型別(值傳遞)
參考型別(指標傳遞), 沒有*號運算子,而是使用兩個關鍵字來表示
- memory(值型別)
- storage(參考型別)
1.memory與storage
| storage | memory | |
|---|---|---|
| 儲存的變數 | 函式外部宣告的變數,即狀態變數 | 函式內部宣告的變數,即區域變數 |
| 存盤的位置 | 區塊鏈上,永久存在 | 記憶體中,運行完之后銷毀 |
| 運行的位置 | 區塊鏈網路上 | 單個節點 |
| 傳遞屬性 | 指標傳遞 | 值傳遞 |
下面通過一個例子來看下一個常見的錯誤:
pragma solidity ^0.4.24;
contract struct_Test{
//狀態變數
string public message;
function setMessage(string newMessage){
//區域變數
string tmp= "hello";
message = newMessage;
}
}
撰寫了一個合約然后我們點擊測驗,運行結果如下:

這里報了一個錯誤:
browser/constract.sol:9:9: TypeError: Type literal_string "hello" is not implicitly convertible to expected type string storage pointer.
string tmp= "hello";
大概的意思就是:我們定義的字串tmp不能隱式轉換為預期的字串存盤指標
解決方法:我們剛才的字串是在函式內部定義的,這時候我們只需要添加memory這個關鍵字就好了
string memory tmp= "hello";
【總結】
在solidity合約內部,函式外部宣告的變數默認儲存在storage里,函式內部宣告的變數默認儲存在memory里
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/2750.html
標籤:python
上一篇:vue-cli腳本架安裝出錯處理
下一篇:Go 語言環境安裝
