Actionscript Duck 打字

发布于 2024-12-06 18:17:02 字数 628 浏览 0 评论 0原文

我正在重写子类中的受保护函数。

假设我有两个课程:苹果和水果。 我已准备好所有变量,这只是一个简化版本。

class FruitBasket
   protected function getRandom():Fruit
    {
        // return random piece of fruit
    }

class AppleBasket extends FruitBasket
   protected override function getRandom():Apple
    {
        // return random apple
    }

class Fruit

class Apple extends Fruit

例子是微不足道的。问题是 getRandom 函数的类型取决于它自己的类型。一个返回一个苹果,另一个返回一个水果。 当然,我遇到了有关覆盖和强制的错误。

我尝试返回 Fruit 而不是 Apple,但该对象不是苹果,因此它没有 Apple 特定的属性。 问题出在鸭子打字上。还有第三个类我无法更改,它在每个对象上执行 getRandom() 函数,并且我需要苹果稍微有所不同。

如何重写 Apple 中的 getRandom 函数,使其返回苹果而不是水果?

I'm overriding a protected function in a subclass.

Let's say I have two classes, Apple and Fruit.
I have all variables in place, this is just a simplified version.

class FruitBasket
   protected function getRandom():Fruit
    {
        // return random piece of fruit
    }

class AppleBasket extends FruitBasket
   protected override function getRandom():Apple
    {
        // return random apple
    }

class Fruit

class Apple extends Fruit

Example is trivial. The problem is that the type of the getRandom function depends on its own type. One returns an apple, the other returns a fruit.
Of course I get errors about override and coercion.

I've tried returning a Fruit instead of an Apple, but then the object is not an apple, therefore it has no Apple-specific properties.
The problem is in ducktyping. There's a third class I cannot change, that executes the getRandom() function on each object, and I need the Apples to be something slightly different.

How can I override the getRandom function in Apple, so that it returns apples, rather than fruit?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

梦魇绽荼蘼 2024-12-13 18:17:03

这是一个圆椭圆问题。我根本不会重写这个函数;相反,我会将函数重命名为更具体。因此,将其重命名为 AppleBasket 中的 getRandomApple()。你的语义变得有点混乱,所以我会把事情分开并且更清晰。

遗憾的是您无法更改 FruitBasket 中的函数名称,因为我会将其更改为 getRandomFruit() 以使语义更清晰。

This is a circle-ellipse problem. I would simply not override the function; rather I would rename the function to be more specific. So rename it to getRandomApple() in AppleBasket. Your semantics are getting a little muddy so I would make things separate and clearer.

It's too bad you can't change the function name in FruitBasket, because I would change that to getRandomFruit() to make the semantics clearer.

魔法唧唧 2024-12-13 18:17:03

与 AS3 中的鸭子类型等效的是“*”或“Object”类型。

The equivalent to duck typing in AS3 would be the "*" or "Object" type.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文