Solidity語言學習筆記————18、字串和函式
字串:需要使用雙引號“”或者單引號’’括起來,例如:定義一個字串變數:string name=“jake”;
string字串不能通過length方法獲得長度
十六進位制資料:以關鍵字hex
打頭,後面緊跟用單或雙引號包裹的字串。如hex"001122ff"
。通過下面的例子來理解下是什麼意思:
contract HexLiteral{
function test() returns (string){
var a = hex"001122FF";
//var b = hex"A";
//Expected primary expression
return a;
}
}
由於一個位元組是8位,所以一個hex
是由兩個[0-9a-z]
字元組成的。所以var b = hex"A";
不是成雙的字串是會報錯的。var型別會在後面的文章進行解釋。
十六進位制的字面量與字串可以進行同樣的類似操作(例如索引):
pragma solidity ^0.4.0;
contract HexLiteralBytes{
function test() returns (bytes4, bytes1, bytes1, bytes1, bytes1){
bytes4 a = hex"001122FF";
return (a, a[0], a[1], a[2], a[3]);
}
}
可以發現,它可以隱式的轉為bytes
,上述程式碼的執行結果如下:Result: "0x001122ff00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000011000000000000000000000000000000000000000000000000000000000000002200000000000000000000000000000000000000000000000000000000000000ff00000000000000000000000000000000000000000000000000000000000000"
Transaction cost: 21857 gas.
Execution cost: 585 gas.
Decoded:
bytes4: 0x001122ff
bytes1: 0x00
bytes1: 0x11
bytes1: 0x22
bytes1: 0xff
函式(function):函式有兩種型別,內部函式(internal)和外部函式(external),內部函式只能在當前合約的上下文內使用,外部函式允許使用到本合約之外的地方。函式的預設型別是內部函式,如果外部函式被本合約之外的環境呼叫,會自動轉換為bytes24型別,包括20位元組的函式所在地址和4位元組的函式方法簽名。
例子:
function abc(uint a) returns(uint){
return a;
}
abc是函式名字,括號內是引數,如果沒有引數則括號內為空,returns是返回值,需要在括號內定義好返回值的型別,如果沒有返回值,則必須省略returns關鍵字。
通過一個例子來學習更多的變化情況:
contract FuntionTest{
function internalFunc() internal{}
function externalFunc() external{}
function callFunc(){
//直接使用內部的方式呼叫
internalFunc();
//不能在內部呼叫一個外部函式,會報編譯錯誤。
//externalFunc();
//Error: Undeclared identifier.
//不能通過`external`的方式呼叫一個`internal`
//Member "internalFunc" not found or not visible after argument-dependent lookup in contract FuntionTest
//this.internalFunc();
//使用`this`以`external`的方式呼叫一個外部函式
this.externalFunc();
}
}
contract FunctionTest1{
function externalCall(FuntionTest ft){
//呼叫另一個合約的外部函式
ft.externalFunc();
//不能呼叫另一個合約的內部函式
//Error: Member "internalFunc" not found or not visible after argument-dependent lookup in contract FuntionTest
//ft.internalFunc();
}
}
解釋:函式internalFunc被定義為內部函式,可以直接呼叫。函式externalFunc被定義為外部函式,在本合約內直接呼叫會報錯,需要加上關鍵字this:this.externalFunc( )才可以。同時,在內部函式前加this函式會報錯,不能用外部函式的呼叫方法來呼叫內部函式。
呼叫另一個合約的外部函式格式:ft.externalFunc( ), fx是另一個合約的名字,externalFunc是外部函式的名字。另一個合約的內部函式是不能被呼叫的,會報錯。
相關文章
- Solidity語言學習筆記————28、純函式Solid筆記函式
- Solidity語言學習筆記————26、回退函式Solid筆記函式
- Solidity語言學習筆記————23、函式呼叫和賦值Solid筆記函式賦值
- Solidity語言學習筆記————27、檢視函式Solid筆記函式
- Solidity語言學習筆記————30、函式過載Solid筆記函式
- Solidity語言學習筆記————20、函式修飾符Solid筆記函式
- Solidity語言學習筆記————1、初識Solidity語言Solid筆記
- c語言學習筆記===函式C語言筆記函式
- Solidity語言學習筆記————42、提示和技巧Solid筆記
- Solidity語言學習筆記————4、常量Solid筆記
- Solidity語言學習筆記————36、 庫Solid筆記
- Solidity語言學習筆記————38、Solidity彙編Solid筆記
- Solidity語言學習筆記————11、隱式轉換和顯式轉換Solid筆記
- Solidity語言學習筆記————25、作用域和宣告Solid筆記
- Solidity語言學習筆記————21、函式的訪問許可權和可見性Solid筆記函式訪問許可權
- Solidity語言學習筆記————12、陣列Solid筆記陣列
- Solidity語言學習筆記————33、事件(Events)Solid筆記事件
- Solidity語言學習筆記————37、Using forSolid筆記
- Solidity語言學習筆記————34、繼承Solid筆記繼承
- Solidity語言學習筆記————35、抽象合約和介面Solid筆記抽象
- Solidity語言學習筆記————26、Assert, Require, Revert 和 ExceptionsSolid筆記UIException
- Solidity語言學習筆記————22、可見性和GettersSolid筆記
- Solidity語言學習筆記————19、函式可見性定義符、修飾符、保留字和語法Solid筆記函式
- Solidity語言學習筆記————43、安全考量Solid筆記
- Solidity語言學習筆記————32、建立合約Solid筆記
- 【Go】Go語言學習筆記-2-函式Go筆記函式
- Solidity語言學習筆記————41、記憶體佈局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語言學習筆記————39、獨立彙編Solid筆記
- Solidity語言學習筆記————7、單位和全域性變數Solid筆記變數
- Solidity語言學習筆記————16、對映MappingSolid筆記APP