函数修饰符-带参数的函数修饰符
上一节
下一节
我们的区块宠物现在有了“间隔时间计时器”功能。
接下来,我们将添加一些辅助方法。我们为你创建了一个名为 pethelper.sol 的新文件,并且将 petmating.sol 导入新文件,这让我们的代码更整洁。
我们打算让区块宠物在达到一定水平后,获得特殊能力。但是为了达到这个小目标,我们还需要进一步学一学什么是“函数修饰符”。
带参数的函数修饰符
之前我们已经读过一个简单的函数修饰符了:onlyOwner。函数修饰符也可以带参数。例如:
// 存储用户年龄的映射
mapping (uint => uint) public age;
// 限定用户年龄的修饰符
modifier olderThan(uint _age, uint _userId) {
require(age[_userId] >= _age);
_;
}
// (中国)必须年满18周岁才允许开车.
// 我们可以用如下参数调用`olderThan` 修饰符:
function driveCar(uint _userId) public olderThan(18, _userId) {
// 其余的程序逻辑
}看到了吧, olderThan 修饰符可以像函数一样接收参数,是“母”函数 driveCar 把参数传递给它的修饰符的。
现在我们自己来写一个修饰符,通过传入的level参数来限制区块宠物使用某些特殊功能。
实战演习
在
PetHelper中,创建一个名为aboveLevel的modifier,它接收2个参数,_level(uint类型) 以及_petId(uint类型)。使用
require运用函数逻辑确保区块宠物pets[_petId].level大于等于_level。记住,修饰符的最后一行为
_;,表示修饰符调用结束后返回,并执行调用函数余下的部分。


