【问题标题】:Structural type instead of a trait结构类型而不是特征
【发布时间】:2013-10-25 21:51:56
【问题描述】:

我对 scala 还很陌生,我正在学习教程:http://www.cakesolutions.net/teamblogs/2013/08/02/akka-and-spray/

在某些时候,它告诉我们可以通过创建结构类型来克服继承要求:

ActorSystem 完全实现了 Core trait。但是,我需要 实现 Core trait 以满足 核心演员。

我可以将 Core 定义为结构类型,在这种情况下,我会 不必担心在这里实现 Core。如果你想试试 出来,删除特征 Core { ... } 并将其替换为

包对象核心 { type Core = { def system: ActorSystem } } 这里的Core类型是一个结构类型,也就是说Core是 任何包含系统的东西:ActorSystem 成员。

我不明白这一点——如果我不创建一个特征核心,我就无法在 CoreActors 中扩展它——我想我在这里遗漏了一些东西。结构类型的概念对我来说也是新的。

【问题讨论】:

    标签: scala


    【解决方案1】:

    结构类型不能扩展。它们不是根据层次结构来描述类型,而是根据它提供的方法来描述类型。

    所以,如果你有

    type Core = { def system: ActorSystem }
    

    这意味着 any 类型有一个名为 system 的方法,该方法不接受任何参数并返回一个 ActoreSystem 也将是一个 Core。

    然而,Scala 中的结构类型在某些方面受到限制。一方面,它们不能递归(也就是说,Core 可能出现在 Core 的定义中),这使得它们毫无用处,例如,对于算术运算符之类的东西。

    它们也不高效,因为它们是通过反射实现的。

    【讨论】:

    • 这是否意味着无论如何也必须定义“核心”?所以我需要一个特质核心吗?教程说我可以用结构类型替换特征。
    • @DanielKhan 不,您不需要将Core 定义为特征。
    猜你喜欢
    • 1970-01-01
    • 2022-11-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-17
    • 2011-12-06
    • 2022-07-31
    相关资源
    最近更新 更多