Solidity
修飾符與私有函式
有人建議我使用私有函式而不是修飾符,因為“私有方法在建構合約時不會佔用額外的空間,並且修飾符就像宏一樣”。所以就像在這個例子中:
代替
modifier onlyOwner { require(msg.sender == owner); _; }
利用
function onlyOwner() private { require(msg.sender == owner); _; }
這是真的?因為我在很多契約中看到,修飾符通常用於將功能限制為僅所有者之類的東西。另外,與私人功能相比,修改器的 gas 成本是否更貴?
不,你在那裡做什麼是行不通的。佔位符是唯一可以與修飾符一起使用的語法。修飾符主要是為了可讀性。您可以呼叫執行在函式開頭或結尾呼叫的相同程式碼的內部函式。不要認為它以任何方式影響氣體,但不要引用我的話。
modifier onlyOwner { require(msg.sender == owner); _; }
以上
onlyOwner
是一個修飾符,可以應用於您的函式以限制其對所有者的使用。此修改器可以根據您的契約設計多次應用。正在修改的函式的程式碼插入_;
到修飾符中的位置。function onlyOwner() private { require(msg.sender == owner); _; }
上面
onlyOwner()
實際上是一個函式,它被呼叫onlyOwner
並且它的可見性是private
但函式不能有,_;
因為那隻允許在modifier
. 此函式不是修飾符。強行這樣做會渲染一個DeclarationError: Undeclared identifier
for_;
。這個程式碼塊甚至沒有執行。方法是否private
佔用額外空間取決於您的契約設計。