You are viewing a single comment's thread from:

RE: Solidity开发指南

in #starnotelast month

有四个关键词:public private external internal

public - 任意访问
private - 仅当前合约内
internal - 仅当前合约及所继承的合约
external - 仅外部访问(在内部也只能用外部访问方式访问)

当使用public 函数时,Solidity会立即复制数组参数到内存, 而external函数则是从calldata读取,而分配内存开销比直接从calldata读取要大的多。
那为什么public函数要复制数组参数数据到内存呢?是因为public函数可能会被内部调用,而内部调用数组的参数是当做指向一块内存的指针。
对于external函数不允许内部调用,它直接从calldata读取数据,省去了复制的过程。

所以,如果确认一个函数仅仅在外部访问,请用external。
当需要内外部都要调用的时候,请用public。

public external
都可以访问,都可以继承
但是external内部不能访问,除非带上this

private internal
只能内部访问,private不可继承,internal可以继承