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

How to define protected methods in Raku?

我有一个 class 和另一个继承自它的。我在父 class 中定义了一些方法,我想与子 class 私下共享,但不与世界共享。

如何在其他编程语言中为此类方法实现类似受保护范围的功能?

我考虑过用私有方法引入一个角色,但我还需要维护一些私有状态以供这些方法使用,我需要同时使 classes does 角色,但这似乎导致(角色的)实例变量在 classes...

中重复

有两个步骤做你想做的事。首先是让父classtrusts子class:

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
}

但这不起作用。虽然调用 public 方法将遵循标准 MRO 来确定调用的方法,但对于私有方法,我们必须明确。在这种情况下,self!secret 将引用直接属于 Dogmethod !secret。为了引用Animal的秘密方法,我们将其显式化:

method tell-secret { 
  say self!Animal::secret
}

可以这么说,现在 Dog 可以泄露豆子了。

您会注意到的一件事是,一旦 class 信任另一个人,它就会完全敞开心扉。无法将信任限制在个别方法上。