Solidity
本地儲存變數
我在這裡閱讀solidity docs ,我似乎很難理解以下內容。
數據位置很重要,因為它們改變了賦值的行為:儲存和記憶體之間的賦值以及狀態變數(甚至來自其他狀態變數)總是創建一個獨立的副本。但是,對本地儲存變數的賦值只分配一個引用,並且這個引用總是指向狀態變數,即使後者在此期間發生了變化。另一方面,從記憶體儲存的引用類型到另一個記憶體儲存的引用類型的分配不會創建副本
1)狀態變數不是總是儲存在儲存中嗎?那麼上面所說的儲存和記憶體之間的分配以及狀態變數是什麼意思呢?
- 究竟什麼是本地儲存變數?
pragma solidity ^0.4.0; contract C { uint state_variable; // same as global storage variable function test() returns uint{ uint local_variable = 10; //same as local storage variable return local_variable * state_variable; } }
我上面的理解正確嗎?有沒有辦法查看這些變數是在記憶體中還是在儲存中,我正在查看 remix IDE 中的反彙編操作碼,但無法弄清楚。
謝謝!
可以通過提供引用或創建獨立副本來為變數賦值。如果它是一個參考,當分配給變數的原始變數發生變化時,變數的值也發生變化。考慮以下,
a = 10 // value of a is 10 b = a // variable b is assigned a value a = 20
如果上面的分配現在分配了一個引用,那麼 b 的值也將是 20。如果分配是通過創建一個獨立的副本來完成的,那麼 b 的值仍然是 10。
在solidity doc中它所說的是,如果分配是在儲存和記憶體之間,或者分配給狀態變數,它將始終創建一個獨立的副本。如果它是一個本地儲存變數,它只會做一個引用。
參考solidity docs中提供的範例,本地儲存變數是在函式內部定義的變數。(變數的作用域僅限於函式)