内部/外部和公共/私人功能之间有什么区别?

时间:2017-12-03 19:19:40

标签: blockchain ethereum solidity smartcontracts

目前阅读可靠性文档: https://solidity.readthedocs.io/en/develop/types.html#function-types

  

默认情况下,函数类型是内部函数,因此internal关键字可以   被省略。相比之下,合同职能本身就是公开的   默认情况下,仅当用作类型名称时,默认为   内部。

这对我没有意义。一个功能如何同时是内部和公共的?

我知道internal意味着只能在合同中调用函数,并且external可以在合同之外调用。所以对我来说,内部是私有的,外部是公共的,但文档使它听起来像是公共和内部同时?

那么internal/externalpublic/private之间在功能方面有什么区别?

2 个答案:

答案 0 :(得分:1)

在Solidity internal/external的术语中,也使用了“两种函数调用”作为描述,而不仅仅是作为访问修饰符。

Take a look at the documentation section about 'Visibility and Getters' inside the contracts

  

由于Solidity知道两种函数调用(内部函数调用不创建实际的EVM调用(也称为“消息调用”)和外部函数调用),因此函数和状态变量有四种类型的可见性。

答案 1 :(得分:1)

这是四个关键字之间的区别:

private表示只能在合同中的其他函数中调用

internal就像私有的一样,但也可以由继承自当前合同的合同来调用

external只能在合同外部调用

public可以在内部和外部的任何地方调用。