Modifiers
加密殭屍外部修飾符
加密殭屍中的一篇教程提到了
external
函式。contract KittyInterface { function getKitty(uint256 _id) external view returns ( bool isGestating, bool isReady, uint256 cooldownIndex, uint256 nextActionAt, uint256 siringWithId, uint256 birthTime, uint256 matronId, uint256 sireId, uint256 generation, uint256 genes ); } contract ZombieFeeding is ZombieFactory { KittyInterface kittyContract; function setKittyContractAddress(address _address) external onlyOwner { kittyContract = KittyInterface(_address); }
在這裡,
setKittyContractAddress
用於在緊急情況下更改地址。為什麼必須聲明為external
?因為聽起來您必須部署另一個合約才能更改 kitty 合約地址。
前任:
contract ZombieFeedingInterface { function setKittyContractAddress(address _address) external; } contract Test { address zfAddress = 0x......; ZombieFeeding zombieFeeding = ZombieFeedingInterface(zfAddress); function changeKittyContractAddress(address _address) private onlyOwner { zombieFeeding.setKittyContractAddress(_address); } }
並且還創建一個單獨的 html 頁面 (UI) 來傳遞 new
address
給這個函式。
setKittyContractAddress
聲明為internal
or不是更好private
,因此所有者不必創建另一個契約,因此可以使用現有契約輕鬆處理它?
external
在這種情況下有什麼好處?
已標記
private
或internal
只能從合約本身中的另一個函式呼叫的函式(或在 的情況下為派生合約internal
)。如果您希望能夠自己呼叫該函式,則需要將其標記為
public
或external
。是的,你可以從另一個合約中呼叫它,但更常見的是你會通過發送交易直接呼叫它。https://solidity.readthedocs.io/en/v0.4.24/contracts.html#visibility-and-getters可能會有所幫助。