Solidity中this和address(this)的区别
Solidity是一种高级编程语言,它是为实现智能契约而设计的。Solidity是一种处于初始阶段并不断进化的语言。自《公约》实施以来,已使许多具有破坏性的变化变得稳固。当前版本的稳定性是0.8.13,到目前为止已经有4次打破稳定性的变化。
一些突破性的变化包括:
1. Solidityv0.5.0打破变化
2. Solidityv0.6.0断裂变化
3.Solidityv0.7.0断裂变化
4. Solidityv0.8.0断裂变化
突破性的更改为已有的方法带来了不同的方法,并进行了增强。 this 和address(this) 是相同的东西,由于这些重大的变化而有不同的术语。
this 当可靠性版本是时,这个术语是否用于智能合约 below 0.5.0 .
address(this) 这个术语用在 latest versions 其中的稳固性指的是智能合约。
让我们使用Remix IDE上的一个智能合约示例来理解这两个术语之间的区别。
1. 使用此智能合约(Solidity版本<0.5.0):
以下是实施上述方法的可行性方案:
// Solidity program to implement
// the above approach
// SPDX-License-Identifier: GPL-3.0
pragma solidity <0.5.0;
contract old_version
{
address public myAddress_in_old_version = this;
uint public myBalance_in_old_verison = this.balance;
}
输出:
您可能会得到一个不同的合同地址,但可以从上面的输出中观察到,该关键字使用balance函数给出了合同地址和合同余额。
在0.5.0及以上版本中使用此关键字:
在0.5.0及以上版本中尝试使用此关键字时会显示以下错误。
可以观察到,编译器正在提供使用address(this)来访问address成员的建议。
2. 智能合约使用address(this):
以下是实施上述方法的可行性方案:
// Solidity program to implement
// the above approach
// SPDX-License-Identifier: GPL-3.0
pragma solidity >=0.5.0 <0.9.0;
contract new_version
{
address public myAddress_in_new_version_ = address(this);
uint public myBalance_in_new_verison = address(this).balance;
}
输出:
你可能会得到一个不同的合同地址,但可以看到,address(this)关键字给了我们合同地址和合同余额使用余额函数。
从上面的例子可以得出结论,这个和address(this)没有区别,只是在Solidity上有版本变化。
S. No. | address(this) | this |
---|---|---|
1. | 在Solidity版本>=5.0.0时使用 | 用于Solidity版本<=5.0.0 |
2. | 在Breaking Change 0.5.0引入 | 它最初使用,直到打破变化0.5.0 |
0.5.0的大的变化也可以在Solidity文档中找到: