Solidity語言學習筆記————15、結構體Struct
自定義結構體
pragma solidity ^0.4.4;
contract Students {
struct Person {
uint age;
uint stuID;
string name;
}
}
Person
就是我們自定義的一個新的結構體型別,結構體裡面可以存放任意型別的值。
怎麼理解結構體:如果我們要描述一個人,需要說明他的姓名、年齡、性別、身高等方面,如果每新增一個人就要寫一遍name=“zhangshan”,age=28。。。太過麻煩,可以把這些描述的各個變數整合為一個結構體,呼叫這個結構體就意味著要新增一個人進去
陣列,對映,結構體也支援自定義的結構體。我們來看一個自定義結構體的例子:
pragma solidity ^0.4.0;
contract SimpleStruct{
//學生
struct Student{
string name;
int num;
}
//班級
struct Class{
string clsName;
//學生的列表
Student[] students;
mapping(string=>Student)index;
}
}
在上面的程式碼中,我們定義了一個簡單的結構體Student
,它包含一些基本的資料型別。另外我們還定義了一個稍微複雜一點的結構體Class
,它包含了其它結構體Student
,以及陣列,對映等型別。Student[ ] students說明結構體可以看成是一個值型別,用法和uint等型別差不多。
陣列型別的students
和對映型別的index
的宣告中還使用了結構體。
初始化一個結構體
- 方法一
pragma solidity ^0.4.4;
contract Students {
struct Person {
uint age;
uint stuID;
string name;
}
#括號內的引數和結構體內的變數一一對應,等同於age=18,stuID=101,name="james"
Person _person = Person(18,101,"james");
Person jack=Person(28,102,"jack");
}
- 方法二
pragma solidity ^0.4.4;
contract Students {
struct Person {
uint age;
uint stuID;
string name;
}
#相比方法一,這一個更清晰但需要多輸入三個變數的名字,輸入順序可以改變,自己取捨
Person _person = Person({age:18,stuID:101,name:"james"});
}
結構體的可見性:
關於可見性,目前只支援internal,所以結構體只能在合約內部和子合約內使用。包含結構體的函式必須顯性宣告為internal
例子:
pragma solidity ^0.4.0;
contract A{
struct S{
string para1;
int para2;
}
//這個函式的引數型別是上面定義的結構體S,因此需要顯性宣告為internal
function f(S s) internal{
//...
}
function f1(){
//當前類中使用結構體
S memory s = S("Test", 10);
f(s);
}
}
contract B is A{
function g(){
//子合約中使用結構體
S memory s = S("Test", 10);
//呼叫父類方法
f(s);
}
}
在上面的程式碼中,我們宣告瞭f(S s)
,由於它包含了struct
的S
,所以不對外可見,需要標記為internal
。你可以在當前類中使用它,如f1()
所示,你還可以在子合約中使用函式和結構體,如B
合約的g()
方法所示。
相關文章
- Solidity語言學習筆記————1、初識Solidity語言Solid筆記
- Solidity語言學習筆記————38、Solidity彙編Solid筆記
- Solidity語言學習筆記————41、記憶體佈局Solid筆記記憶體
- Solidity語言學習筆記————36、 庫Solid筆記
- Solidity語言學習筆記————37、Using forSolid筆記
- Solidity語言學習筆記————4、常量Solid筆記
- Solidity語言學習筆記————33、事件(Events)Solid筆記事件
- Solidity語言學習筆記————12、陣列Solid筆記陣列
- Solidity語言學習筆記————34、繼承Solid筆記繼承
- C語言學習筆記:結構體與指標C語言筆記結構體指標
- Go語言學習筆記 - PART7 - 結構體Go筆記結構體
- Solidity語言學習筆記————31、智慧合約的基本檔案結構概述Solid筆記
- struct 結構體 -Go 學習記錄Struct結構體Go
- Solidity語言學習筆記————43、安全考量Solid筆記
- Solidity語言學習筆記————42、提示和技巧Solid筆記
- Solidity語言學習筆記————28、純函式Solid筆記函式
- Solidity語言學習筆記————26、回退函式Solid筆記函式
- Solidity語言學習筆記————16、對映MappingSolid筆記APP
- Solidity語言學習筆記————32、建立合約Solid筆記
- Solidity語言學習筆記————39、獨立彙編Solid筆記
- Solidity語言學習筆記————25、作用域和宣告Solid筆記
- Solidity語言學習筆記————27、檢視函式Solid筆記函式
- Solidity語言學習筆記————10、布林型、整型Solid筆記
- Solidity語言學習筆記————3、Remix的基本使用Solid筆記REM
- Solidity語言學習筆記————18、字串和函式Solid筆記字串函式
- Solidity語言學習筆記————14、左值運算子Solid筆記
- Solidity語言學習筆記————9、左值運算子Solid筆記
- Solidity語言學習筆記————17、原始檔對映Solid筆記
- Solidity語言學習筆記————5、全域性變數Solid筆記變數
- Solidity語言學習筆記————2、使用編譯器Solid筆記編譯
- Solidity語言學習筆記————30、函式過載Solid筆記函式
- Solidity語言學習筆記————35、抽象合約和介面Solid筆記抽象
- Solidity語言學習筆記————26、Assert, Require, Revert 和 ExceptionsSolid筆記UIException
- Solidity語言學習筆記————22、可見性和GettersSolid筆記
- Solidity語言學習筆記————20、函式修飾符Solid筆記函式
- go語言學習-結構體Go結構體
- Golang 學習——結構體 struct (一)Golang結構體Struct
- Golang 學習——結構體 struct (二)Golang結構體Struct