函数修饰符-自定义函数修饰符
上一节
下一节
现在让我们设计一些使用 aboveLevel 修饰符的函数。
作为游戏,你得有一些措施激励玩家们去升级他们的区块宠物:
2级以上的区块宠物,玩家可给他们改名。
20级以上的区块宠物,玩家能给他们定制的 DNA。
是实现这些功能的时候了。以下是上一步的示例代码,供参考:
// 存储用户年龄的映射
mapping (uint => uint) public age;
// 限定用户年龄的修饰符
modifier olderThan(uint _age, uint _userId) {
require (age[_userId] >= _age);
_;
}
// 必须年满16周岁才允许开车 (至少在美国是这样的).
// 我们可以用如下参数调用`olderThan` 修饰符:
function driveCar(uint _userId) public olderThan(16, _userId) {
// 其余的程序逻辑
}实战演习
创建一个名为
changeName的函数。它接收2个参数:_petId(uint类型)以及_newName(string类型),可见性为external。它带有一个aboveLevel修饰符,调用的时候通过_level参数传入2, 当然,别忘了同时传_petId参数。在这个函数中我们用
require语句验证msg.sender是否为petToOwner [_petId]。然后函数将
pets[_petId] .name设置为_newName。在
changeName下创建另一个名为changeDna的函数。它的定义和内容几乎和changeName相同,不过它第二个参数是_newDna(uint类型),在修饰符aboveLevel的_level参数中传递20。现在,他可以把区块宠物的dna设置为_newDna了。


