Solidity語言學習 (三)

2021-08-29 04:03:14 字數 2783 閱讀 1784

使用var關鍵字時,第一次賦值給變數,編譯器會自動推斷變數的型別,而且推斷後不能更改這個變數的型別了,如果更改了就會出錯,還有就是不能在函式引數中使用。注意:有時候var會推斷出乙個錯誤的型別。

案例:

pragma solidity ^0.4.18;

contract var

}

結果為:

solidity中var 推斷型別時,遵循就地最小的原則,也就是說,推斷uint型別時,它會預設選擇最小的。

案例:

pragma solidity ^0.4.18;

contract var

}

這樣的話,就會報錯:

之後賦值的資料在 這個型別以內就可以。。

var可以將函式賦值給乙個變數

特點:hexencodingto...函式,以關鍵字hex開頭,後面跟一些字串,比如hex"001122"

案例:

contract hex

16進製制與bytes轉換,轉換完成後也可以通過下標來取其指定的元素值。

案例:

contract hex

常量:在solidity中,並不是所有的的型別都支援常量,只有值型別與string型別支援。

string constant a ="wek";
常量定義時要注意需要宣告資料型別。

變數

變數位置:

memory:儲存在記憶體中

storage:永久儲存在區塊鏈上

calldata:不用再程式中指定,只要是calldata中的資料,它都是唯讀的,並不持久化到區塊鏈上,一般在外部函式才會指定。

儲存位置說明:狀態變數預設儲存在storage上面,函式中的區域性變數也會儲存在storage上面,函式的引數和返回值會儲存在memory上面。

資料位置轉換:

memory ->memory     引用傳遞,會改變其源資料的值。

memory->storage        不會改變源資料的值。

storage->memory    資料拷貝 會改變源資料的值。

storage->storage     會改變源資料的值。

contract datalocal

function fmemory(uint[5] y)

// 2. memory->storage

function mtos() view public returns(uint[5])

// 函式裡面的變數,會直接引發錯誤,因為這本身是乙個非法操作

function infunc(uint x)

// 3. storage->storage

function st(uint[5] storage y) internal

function g() view returns(uint[5])

// 4. storage->memory

}

特點:使用者的自定義型別,,列舉可以顯示的與整形進行轉換,顯示的轉換會在執行時檢測數值範圍,如果範圍不匹配會引發異常,列舉型別至少要有乙個成員。

預設從0開始,注:不能與整型進行隱式的轉換。

enum主要描述產品是否用過(new,used)

enum productcondition
案例:

該例項結合struct和enum,生成struct物件,在生成struct物件的過程中使用enum型別:

pragma solidity ^0.4.13;

contract store

enum productcondition

function getproductcondition() public pure returns (productcondition)

}

從這個例項可以看出,如果構建product結構體傳入productcondition.used則返回1,productcondition.new返回0

Solidity語言學習筆記 34 繼承

pragma solidity 0.4.16 contract owned address owner 使用 is 繼承另乙個合約。子合約可以訪問所有非私有成員,包括 內部函式和狀態變數。不過,不能通過 this 來外部訪問這些。contract mortal is owned 這些抽象合約僅用於建...

Solidity語言學習筆記 39 獨立彙編

從組合語言轉為位元組碼應該盡可能的少坑。控制流應該容易檢測來幫助進行形式驗證與優化。pragma solidity 0.4.16 contract c default memory allocator function allocate size pos the contract function ...

C語言學習(三)

程式的模組化設計 程式設計練習 課外話 挫折是人生的常態,在我們遭遇疫情,不應一味放大痛苦讓其充塞心靈。我們要學會調適心弦,坦然面對,全國人民團結一致,就一定會戰勝疫情。祖國加油 武漢加油 你的答案 陣列程式的模組化設計 所謂陣列,是有序的元素序列。1 若將有限個型別相同的變數的集合命名,那麼這個名...