Solidity字符串和函数
  字符串:需要使⽤双引号""或者单引号''括起来,例如:定义⼀个字符串变量:string name="jake";string字符串不能通过length⽅法获得长度。
⼀.⼗六进制数据
  以关键字hex打头,后⾯紧跟⽤单或双引号包裹的字符串。如hex"001122ff"。通过下⾯的例⼦来理解下是什么意思:
pragma solidity ^0.4.4;
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.4;
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。
三.函数(function)
  函数有两种类型,内部函数(internal)和外部函数(external),内部函数只能在当前合约的上下⽂内使⽤,外部函数允许使⽤到本合约之外的地⽅。函数的默认类型是内部函数,如果外部函数被本合约之外的环境调⽤,会⾃动转换为bytes24类型,包括20字节的函数所在地址和4字节的函数⽅法签名。
字符串长度1是什么意思  例⼦:
function abc(uint a) returns(uint){
  return a;
}
  abc是函数名字,括号内是参数,如果没有参数则括号内为空,returns是返回值,需要在括号内定义好返回值的类型,如果没有返回值,则必须省略returns关键字。
  通过⼀个例⼦来学习更多的变化情况:
pragma solidity ^0.4.4;
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`的⽅式调⽤⼀个外部函数
}
}
contract FunctionTest1{
function externalCall(FuntionTest ft){
//调⽤另⼀个合约的外部函数
//不能调⽤另⼀个合约的内部函数
//Error: Member "internalFunc" not found or not visible after argument-dependent lookup in contract FuntionTest
//ft.internalFunc();
}
}
  解释:函数internalFunc被定义为内部函数,可以直接调⽤。函数externalFunc被定义为外部函数,在本合约内直接调⽤会报错,需要加上关键字this:alFunc( )才可以。同时,在内部函数前加this函数会报错,不能⽤外部函数的调⽤⽅法来调⽤内部函数。
  调⽤另⼀个合约的外部函数格式:ft.externalFunc( ),fx是另⼀个合约的名字,externalFunc是外部函数的名字。另⼀个合约的内部函数是不能被调⽤的,会报错。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。