如何在Raku中定义受保护的方法?

我有一个类,另一个类是从它继承的。我想在父类中定义一些方法,我想与子类私下共享,而不与世界共享。

如何为此类方法实现其他编程语言中的受保护范围之类的东西?

我已经考虑过使用私有方法引入角色,但是我还需要维护一些私有状态以供方法使用,并且我需要使两个类都does成为角色,但这似乎导致(角色的)实例变量在两个类中都重复了……

iCMS 回答:如何在Raku中定义受保护的方法?

有两个步骤可以完成您想做的事情。第一种是让父类trusts为子类:

class Dog { ... }      # forward declaration necessary

class Animal { 
   trusts Dog;         # Dog now has access to private methods
   method !secret { 
     return 42
   }
}

class Dog is Animal {
   method tell-secret { ... }
}

现在,让我们的狗来揭露动物的秘密。您可能会认为这很简单

method tell-secret { 
  say self!secret
}

但这不起作用。虽然调用公共方法将遵循标准的MRO来确定要调用的方法,但使用私有方法时,我们必须明确。在这种情况下,self!secret指的是直接属于method !secret的{​​{1}}。为了引用Dog的秘密方法,我们将其明确表示:

Animal

现在,Dog可以撒豆了。

您会注意到的一件事是,一旦一个类信任另一个类,它就会完全开放。没有办法将信任仅限于单个方法。

本文链接:https://www.f2er.com/1755030.html

大家都在问