如何在 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
将引用直接属于 Dog
的 method !secret
。为了引用Animal
的秘密方法,我们将其显式化:
method tell-secret {
say self!Animal::secret
}
可以这么说,现在 Dog 可以泄露豆子了。
您会注意到的一件事是,一旦 class 信任另一个人,它就会完全敞开心扉。无法将信任限制在个别方法上。
我有一个 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
将引用直接属于 Dog
的 method !secret
。为了引用Animal
的秘密方法,我们将其显式化:
method tell-secret {
say self!Animal::secret
}
可以这么说,现在 Dog 可以泄露豆子了。
您会注意到的一件事是,一旦 class 信任另一个人,它就会完全敞开心扉。无法将信任限制在个别方法上。