/** * 使用匿名函数实现操作封装 * 将匿名函数作为 map 的键值,通过命令行参数动态调用匿名函数 * 运行命令 go run src/hh/main.go --skill=fly */
顺晟科技
2021-06-16 10:45:24
328
关于实度系列文章的完整列表,请参见分类-实度。
写在前面
实性是以太网智能契约的编程语言。在阅读本文之前,您应该对以太网和智能契约有所了解。
如果你不懂,建议你先看看什么是以太馆
欢迎订阅区块链科技专栏,阅读更全面的分析文章。
查看功能(查看功能)
如果一个函数不修改状态变量,应该声明为视图函数,但以下情况被认为是修改状态:
写状态变量
触发事件(事件)
创建其他合同
使用自毁。
呼叫呼叫与以太网相连
任何没有视图或纯粹装饰的函数都被调用
使用低级调用。
使用包含特定运算符的内联程序集
看一个例子:
务实稳健的^0.4.16;
合同C {
uint公共数据=0;
函数f(uint a,uint b)公共视图返回(uint) {
现在返回a * (b 42 );
}
//方式不对,虽然可以编译通过
功能df(uint a)公共视图{
data=a;
}
}
有几个地方需要注意:
声明为视图相当于声明为常量,是视图的别名,规划实度0.5.0版后会放弃(常量这个词比较模糊,视图可以更直观的表达返回值)。
访问函数都标记为视图。
目前编译器不要求声明是view,但是建议你把不会修改状态的函数标记为view。
纯函数(纯函数)
该函数可以声明为纯函数,这意味着它既不读取也不修改状态。除了前一节中描述的几种修改状态的情况之外,以下情况被认为是读取状态:
读取状态变量
这个. balance还是\。平衡
访问block、tx和msg的成员(msg.sig和msg.data除外)。
任何没有纯装饰的函数都被调用
使用包含特定运算符的内联程序集
看一个例子:
务实稳健的^0.4.16;
合同C {
函数f(uint a,uint b)公共纯收益(uint) {
返回a *(b 42);
}
}
虽然view和pure修饰符的编译器不是强制性的,view和pure的修改也不会改变gas的消耗,但是更好的编码习惯让我们很容易在smart contracts中发现错误。
16
2021-06
16
2021-06
16
2021-06
16
2021-06
16
2021-06
16
2021-06