18910140161

Solidity教程之视图函数 虚函数讲解

顺晟科技

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中发现错误。

相关文章
我们已经准备好了,你呢?
2024我们与您携手共赢,为您的企业形象保驾护航