oop - 如何在 Raku 中定义 protected 方法?

标签 oop methods roles raku protected

我有一个类和另一个继承自它的类。我在父类中定义了一些方法,我想私下与子类共享,但不与世界共享。
对于此类方法,我如何才能在其他编程语言中实现类似 protected 范围?
我考虑过使用私有(private)方法引入一个角色,但我还需要维护一些私有(private)状态以供方法使用,并且我需要创建两个类 does角色,但这似乎导致实例变量(角色的)在两个类中重复......

最佳答案

有两个步骤可以做你想做的事。首先是要有父类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 { ... }
}
现在,让狗揭开动物的 secret 。你可能认为这很简单
method tell-secret { 
  say self!secret
}
但这不起作用。虽然调用公共(public)方法将遵循标准 MRO 来确定被调用的方法,但对于私有(private)方法,我们必须是显式的。在这种情况下,self!secret将引用 method !secret直接属于Dog .引用 Animal的 secret 方法,我们明确表示:
method tell-secret { 
  say self!Animal::secret
}
现在Dog可以说会洒 bean 了。
您会注意到的一件事是,一旦一个类信任另一个类,它就会完全开放自己。没有办法将信任限制在单个方法上。

关于oop - 如何在 Raku 中定义 protected 方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63387285/

相关文章:

java - Java EE 中基于角色的菜单

c++ - 关于异常,覆盖标准异常方法

java - 有什么办法可以结合这两种方法吗?

c# - Visual Studio 模板 "Generate Method Stub"

java - 我如何从Java对象获取信息?我可以进一步简化我的代码吗?

PHP:用数学管理角色?

permissions - 如何在Keycloak中授予某些用户部分用户管理权限?

oop - 何时优先考虑继承而不是组合

c++ - 查找表/数组索引的数据类型

c# - 如何正确使用依赖注入(inject)?