函数修饰符用于修改函数的行为。例如,向函数添加条件限制。
创建带参数修饰符和不带参数修饰符,如下所示:
contract Owner {
// 定义修饰符 onlyOwner 不带参数
modifier onlyOwner {
require(msg.sender == owner);
_;
}
// 定义修饰符 costs 带参数
modifier costs(uint price) {
if (msg.value >= price) {
_;
}
}
}
修饰符定义中出现特殊符号_
的地方,用于插入函数体。如果在调用此函数时,满足了修饰符的条件,则执行该函数,否则将抛出异常。
pragma solidity ^0.5.0;
contract Owner {
address owner;
constructor() public {
owner = msg.sender;
}
// 定义修饰符 onlyOwner 不带参数
modifier onlyOwner {
require(msg.sender == owner);
_;
}
// 定义修饰符 costs 带参数
modifier costs(uint price) {
if (msg.value >= price) {
_;
}
}
}
contract Register is Owner {
mapping (address => bool) registeredAddresses;
uint price;
constructor(uint initialPrice) public { price = initialPrice; }
// 使用修饰符 costs
function register() public payable costs(price) {
registeredAddresses[msg.sender] = true;
}
// 使用修饰符 onlyOwner
function changePrice(uint _price) public onlyOwner {
price = _price;
}
}