SoliditySolidity:
Solidity:view
和constant
有什麼區別?
Solidity 0.4.16 引入了
view
andconstant
函式修飾符。文件說:
constant
對於函式:同view
.這是否意味著
view
只是 的別名constant
?如果是這樣,我們為什麼需要它?
這在此處進行了討論:https ://github.com/ethereum/solidity/issues/992並已在您注意到的更改中部分實施。
據我了解,重點是
constant
具有誤導性(常量函式不一定返回常量結果),並且不是特別細微。完成後的更改將引入兩個替換關鍵字:view
並且pure
旨在更有意義和有用。現在:
- 常量函式不應修改狀態(尚未完全執行)
- 每次呼叫時都會評估常量狀態變數(即類中而不是方法中的變數)
更改後:
- 為函式引入了關鍵字視圖(它替換了常量)。呼叫視圖不能改變未來與任何合約互動的行為。這意味著此類函式不能使用 SSTORE,不能發送或接收乙太幣,只能呼叫其他視圖或純函式。
- 關鍵字 pure 是為函式引入的,它們是視圖函式,附加限制是它們的值僅取決於函式參數。這意味著他們不能使用 SSTORE、SLOAD,不能發送或接收乙太幣,不能使用 msg 或 block,只能呼叫其他純函式。
- 關鍵字常量在函式上無效
- 任何變數上的關鍵字常量意味著它不能被修改(並且可以被優化器放入記憶體或字節碼中)