W3Cschool
恭喜您成為首批注冊用戶
獲得88經(jīng)驗(yàn)值獎(jiǎng)勵(lì)
聲明的變量將具有一個(gè)初始默認(rèn)值,其字節(jié)表示全為零。變量的“默認(rèn)值”是任何類型的典型“零狀態(tài)”。例如,a 的默認(rèn)bool 值為false。uint或int 類型的默認(rèn)值為0。對(duì)于靜態(tài)大小的數(shù)組和bytes1to bytes32,每個(gè)單獨(dú)的元素將被初始化為其類型對(duì)應(yīng)的默認(rèn)值。對(duì)于動(dòng)態(tài)大小的數(shù)組bytes 和string,默認(rèn)值為空數(shù)組或字符串。對(duì)于該enum類型,默認(rèn)值是它的第一個(gè)成員。
Solidity 中的作用域遵循 C99(和許多其他語言)的廣泛作用域規(guī)則:變量從聲明后的那一點(diǎn)到包含聲明的最小塊的末尾都是可見的。作為此規(guī)則的一個(gè)例外,在 for 循環(huán)的初始化部分中聲明的變量僅在 for 循環(huán)結(jié)束之前可見。{ }
類似參數(shù)的變量(函數(shù)參數(shù)、修飾符參數(shù)、catch 參數(shù)……)在后面的代碼塊中可見 - 函數(shù)體/修飾符的函數(shù)和修飾符參數(shù)以及 catch 參數(shù)的 catch 塊。
在代碼塊之外聲明的變量和其他項(xiàng)目,例如函數(shù)、契約、用戶定義的類型等,甚至在聲明之前就可見。這意味著您可以在聲明和遞歸調(diào)用函數(shù)之前使用狀態(tài)變量。
因此,以下示例將在沒有警告的情況下編譯,因?yàn)檫@兩個(gè)變量具有相同的名稱但范圍不相交。
// SPDX-License-Identifier: GPL-3.0 pragma solidity >=0.5.0 <0.9.0; contract C { function minimalScoping() pure public { { uint same; same = 1; } { uint same; same = 3; } } }
作為 C99 范圍規(guī)則的一個(gè)特殊示例,請注意,在下文中,第一次賦值x將實(shí)際分配外部變量而不是內(nèi)部變量。在任何情況下,您都會(huì)收到有關(guān)外部變量被遮蔽的警告。
// SPDX-License-Identifier: GPL-3.0 pragma solidity >=0.5.0 <0.9.0; // This will report a warning contract C { function f() pure public returns (uint) { uint x = 1; { x = 2; // this will assign to the outer variable uint x; } return x; // x has value 2 } }
警告
在 0.5.0 版本之前,Solidity 遵循與 JavaScript 相同的范圍規(guī)則,也就是說,在函數(shù)內(nèi)任何地方聲明的變量都將在整個(gè)函數(shù)的范圍內(nèi),無論它在哪里聲明。以下示例顯示了一個(gè)用于編譯但從 0.5.0 版本開始導(dǎo)致錯(cuò)誤的代碼片段。
// SPDX-License-Identifier: GPL-3.0 pragma solidity >=0.5.0 <0.9.0; // This will not compile contract C { function f() pure public returns (uint) { x = 2; uint x; return x; } }
Copyright©2021 w3cschool編程獅|閩ICP備15016281號(hào)-3|閩公網(wǎng)安備35020302033924號(hào)
違法和不良信息舉報(bào)電話:173-0602-2364|舉報(bào)郵箱:jubao@eeedong.com
掃描二維碼
下載編程獅App
編程獅公眾號(hào)
聯(lián)系方式:
更多建議: