public和external的区别
时间: 2024-02-18 12:04:23 浏览: 66
在 Solidity 中,`public` 和 `external` 都是函数的可见性修饰符。它们的区别在于调用方式和燃气消耗。
`public` 修饰符表示函数可以从合约内部和外部进行访问。在内部调用时,函数会直接跳转到对应的代码位置,不会发生调用和返回,因此不会产生额外的燃气消耗。在外部调用时,函数会被编译成一个外部调用函数,需要通过 `CALL` 指令进行调用,因此会产生一定的燃气消耗。如果函数没有返回值,则使用 `public` 和 `external` 修饰符是等效的。下面是一个使用 `public` 修饰符的示例:
```solidity
contract Test {
uint256 public value;
function setValue(uint256 _value) public {
value = _value;
}
}
```
在这个示例中,`setValue` 函数使用 `public` 修饰符,可以从合约内部和外部进行访问,并可以设置一个 `value` 变量的值。
`external` 修饰符表示函数只能从合约外部进行访问,不能从合约内部进行访问。在外部调用时,函数会被编译成一个外部调用函数,需要通过 `CALL` 指令进行调用,因此会产生一定的燃气消耗。与 `public` 不同,`external` 函数不能访问合约内部的变量和函数。下面是一个使用 `external` 修饰符的示例:
```solidity
contract Test {
function setValue(uint256 _value) external {
// 只能从合约外部调用
}
}
```
在这个示例中,`setValue` 函数使用 `external` 修饰符,只能从合约外部进行调用,不能从合约内部进行访问。
相关推荐
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)