阅读文档,它说"以声明性方式向函数添加语义">
我可以将其理解为Java中的"接口"吗?
修饰符允许您将其他功能包装到方法中,因此它们有点像 OOP 中的装饰器模式。
修饰符通常用于智能合约中,以确保在继续执行方法中的其余代码体之前满足某些条件。
例如,isOwner
通常用于确保方法的调用方是协定的所有者:
modifier isOwner() {
if (msg.sender != owner) {
throw;
}
_; // continue executing rest of method body
}
doSomething() isOwner {
// will first check if caller is owner
// code
}
您还可以堆叠多个修饰符以简化您的过程:
enum State { Created, Locked, Inactive }
modifier isState(State _state) {
require(state == _state);
_; // run rest of code
}
modifier cleanUp() {
_; // finish running rest of method body
// clean up code
}
doSomething() isOwner isState(State.Created) cleanUp {
// code
}
修饰符以声明性和可读的方式表达正在发生的操作。
它只是一个标准,用于确保在有人调用特定函数时满足某个属性。
您可以制作自己的修改器:)
示例 1:
modifier owner() {
if (msg.sender != owner) {
throw;
}
_; // continue executing rest of method body
}
doSomething() isOwner {
// will first check if caller is owner
// code
}
示例 2:
uint256 thisNumber = 4;
modifier HigherThan2(uint256 _x) {
if (_x < 2) {
throw;
}
_; // continue executing rest of method body
}
doMathStuff() HigherThan2(thisNumber) {
// will check if thisNumber is higher than 2
// then, more code
}
另一方面,您可以使用预定义的修饰符,例如payable
.
function ThisSuperICO() payable {
require (msg.value > 0);
// more code
}
基本上是处理条件的标准,当这些条件不满足时抛出调用。
希望这有帮助!
干杯。
修饰符是一段代码,它包含开发人员定义的某种验证类型的规则或逻辑。这段代码用于可重用性目的。 它是在 solidity 中定义函数时传入的,其目的是在运行相应的函数之前进行一些验证,现在如果验证失败,那么相应的函数就不会执行。
与node.js/express-framework类比:- 将其视为中间件函数。
与html表单验证函数类比:- 当使用验证函数调用触发提交时,如果验证失败,则提交将中止。
类似于我们实现基于角色的路由的方式,修饰符用于保护函数。如果函数传递某些条件,调用方可以调用该函数。
智能合约有24kb的大小限制。 如果其大小较大,则无法编译合约。modifiers
允许我们减少合约规模。假设你有一个大合约,你有 10 个受保护的功能。在每个函数中实现 if 条件会占用太多空间。