Solidity語言學習筆記————25、作用域和宣告
作用域和宣告(Scoping and Declarations)
- 已宣告的變數將具有其位元組表示為全0的初始值。
- 變數的初始值是任何型別的典型“零狀態”(“zero-state)。例如,
bool
的初始值為false
。uint
或int
型別的預設值為0
。 - 對於靜態大小的陣列和
bytes1
到bytes32
,每個單獨的元素將被初始化為對應於其型別的初始值。 - 對於動態大小的陣列、
bytes
和string
,初始值是空陣列或空字串。
在函式中任何位置宣告的變數,它的作用域為整個函式,與宣告位置無關。這是因為Solidity繼承了JavaScript的作用域規則。這與許多語言相反——變數僅作用於宣告的地方直到語句塊的末尾為止。
因此,下面的程式碼是非法的,導致編譯器丟擲一個錯誤,識別符號已經宣告:
// 以下程式碼無法編譯
pragma solidity ^0.4.16;
contract ScopingErrors {
function scoping() public {
uint i = 0;
while (i++ < 1) {
uint same1 = 0;
}
while (i++ < 2) {
uint same1 = 0;// 非法,重複宣告same1
}
}
function minimalScoping() public {
{
uint same2 = 0;
}
{
uint same2 = 0;// 非法,重複宣告same2
}
}
function forLoopScoping() public {
for (uint same3 = 0; same3 < 1; same3++) {
}
for (uint same3 = 0; same3 < 1; same3++) {// 非法,重複宣告same3
}
}
}
除此之外,如果變數被宣告,則在函式的開頭將其初始化為其預設值。因此,以下程式碼是合法的,儘管寫得不好:
pragma solidity ^0.4.0;
contract C {
function foo() public pure returns (uint) {
// baz隱式初始化為0
uint bar = 5;
if (true) {
bar += baz;
} else {
uint baz = 10;// 永遠不會執行
}
return bar;// 返回 5
}
}
相關文章
- Solidity語言學習筆記————1、初識Solidity語言Solid筆記
- Solidity語言學習筆記————42、提示和技巧Solid筆記
- Solidity語言學習筆記————38、Solidity彙編Solid筆記
- Solidity語言學習筆記————36、 庫Solid筆記
- Solidity語言學習筆記————37、Using forSolid筆記
- Solidity語言學習筆記————4、常量Solid筆記
- Solidity語言學習筆記————18、字串和函式Solid筆記字串函式
- Solidity語言學習筆記————33、事件(Events)Solid筆記事件
- Solidity語言學習筆記————12、陣列Solid筆記陣列
- Solidity語言學習筆記————34、繼承Solid筆記繼承
- Solidity語言學習筆記————35、抽象合約和介面Solid筆記抽象
- Solidity語言學習筆記————26、Assert, Require, Revert 和 ExceptionsSolid筆記UIException
- Solidity語言學習筆記————22、可見性和GettersSolid筆記
- Solidity語言學習筆記————43、安全考量Solid筆記
- Solidity語言學習筆記————28、純函式Solid筆記函式
- Solidity語言學習筆記————26、回退函式Solid筆記函式
- Solidity語言學習筆記————16、對映MappingSolid筆記APP
- Solidity語言學習筆記————32、建立合約Solid筆記
- Solidity語言學習筆記————23、函式呼叫和賦值Solid筆記函式賦值
- Solidity語言學習筆記————41、記憶體佈局Solid筆記記憶體
- Solidity語言學習筆記————7、單位和全域性變數Solid筆記變數
- Solidity語言學習筆記————39、獨立彙編Solid筆記
- Solidity語言學習筆記————27、檢視函式Solid筆記函式
- Solidity語言學習筆記————10、布林型、整型Solid筆記
- Solidity語言學習筆記————3、Remix的基本使用Solid筆記REM
- Solidity語言學習筆記————15、結構體StructSolid筆記結構體Struct
- Solidity語言學習筆記————14、左值運算子Solid筆記
- Solidity語言學習筆記————9、左值運算子Solid筆記
- Solidity語言學習筆記————17、原始檔對映Solid筆記
- Solidity語言學習筆記————5、全域性變數Solid筆記變數
- Solidity語言學習筆記————2、使用編譯器Solid筆記編譯
- Solidity語言學習筆記————30、函式過載Solid筆記函式
- Solidity語言學習筆記————20、函式修飾符Solid筆記函式
- Python學習筆記 - 作用域Python筆記
- Solidity語言學習筆記————11、隱式轉換和顯式轉換Solid筆記
- Solidity語言學習筆記————24、輸入輸出引數Solid筆記
- Solidity語言學習筆記————13、固定大小位元組陣列Solid筆記陣列
- Solidity語言學習筆記————14、動態位元組陣列Solid筆記陣列