Solidity學習 (15)getter訪問器

2021-08-28 22:58:20 字數 1965 閱讀 3782

作用:

對於所有public狀態變數,solidity語言編譯器,提供了自動為狀態變數生成對應的getter(訪問器)的特性

在合約內,我們可以直接操作及訪問data狀態變數,但在合約外我們只能用data()的方式來訪問。另外,在合約內,我們不能直接訪問data(),因為訪問器函式的可見性是external。

直觀版:

(1)合約內訪問public狀態變數a-----------------------> 直接用a即可   【可set】【可訪問】

(2)合約外訪問public狀態變數a-----------------------> 用a()              【只能訪問】

(3)狀態變數所建立的訪問器函式,與變數同名。

測試**:

pragma solidity ^0.4.0;

contract accessgetter

}contract setvar

}

下對於非基本型別型別的狀態變數進行舉例:

1、列舉

列舉的訪問器與基本型別類似,均是生成與狀態變數同名的函式。

pragma solidity ^0.4.0;

contract enumgetter

color public color = color.green;

function f() returns (color, color)

}

2、陣列 

陣列的訪問器要帶引數,以表示陣列的下標

測試**:

(1)一維變長陣列

pragma solidity ^0.4.0;

contract arraygetter

}

(2)多維陣列

pragma solidity ^0.4.0;

contract arraygetter

}

3、對映

顯而易見,跟陣列差不多的操作。

對於對映型別,它的訪問器也是有引數的,引數為對映定義的鍵型別。

測試**:

pragma solidity ^0.4.0;

function f() returns (uint, uint)

}

4、結構體

結構體的訪問器也是同名的函式。訪問器返回結果是結構體中的每個變數。

pragma solidity ^0.4.0;

contract structgetter

s public s = s(10, "hello",hex"1234");

function f() returns (uint, bytes32)

}

5、注意事項?

solidity不支援通過external的訪問變長內容?

但是remix則可以。。

pragma solidity ^0.4.0;

contract complex

data internal arr;

function f() returns (uint, bytes3)

}

上述**將返回10x000123

參考文章: 

solidity學習筆記

1 狀態變數是放在區塊鏈上 2 view修飾的函式,讀取和訪問狀態變數,表示訪問狀態變數 區塊鏈上的資料 但是不會修改,僅限於訪問,不消耗資源 3 pure修飾的函式,不修飾也不讀取狀態變數 區塊鏈上的資料 不會消耗任何資源 4 不用view,pure等修飾的函式,會修改區塊鏈上的資料,會消耗資源 ...

Solidity學習筆記(3)

在此後的學習,將更加深入理解solidity的方方面面 solidity原始檔的布局 引入其他的原始檔 注釋合約的結構 型別變數型別 列舉 參考型別對映 包括左賦值的操作符 在基本型別間的轉換 型別匯出 單元區域性和全域性可見變數 ether單元 time單元 特殊變數和函式 表示式和控制結構 控制...

以太坊 Solidity學習

函式set和get可以用來變更或取出變數的值。該合約能完成的事情並不多 由於以太坊構建的基礎架構的原因 它能允許任何人在合約中儲存乙個單獨的數字,並且這個數字可以被世界上任何人訪問,且沒有可行的辦法阻止你發布這個數字。當然,任何人都可以再次呼叫 set 傳入不同的值,覆蓋你的數字,但是這個數字仍會被...