agi*_*eel 8 scala namespaces traits package
看完马丁关于反思和编纂的主题演讲后,我似乎无法从头脑中得到这个疯狂的问题.马丁谈到了"(婚礼)蛋糕模式",其中特质扮演着核心角色.我想知道,为什么在世界上我们需要包装时我们已经有了特征?有什么package
可以做的,什么trait
(至少在理论上)不能?
我不是在谈论当前的实现,我只是想象一下,如果我们用特征替换包,那会是什么样的编程.在我脑海里,它会是这样的:
package
不需要)package object
s总结我的所有问题:
更新
Daniel Spiewak在这个关于依赖注入的主题演讲中谈到了使用Cake Pattern可以做的所有事情的冰山一角.
Martin Odersky说Scala可以通过特征,对象,方法和路径来实现(我希望我没有忘记一些事情).
类和包都在那里,因为Scala旨在成为托管语言,即运行的语言(这实际上不是有趣的位),并与主机平台(这是重要的点)互操作.Scala旨在与之互操作的一些主机平台是Java平台和CLI,它们都具有类和包的概念(在CLI的情况下为命名空间),这些概念非常明显,不能轻易表达为特征或对象.这与接口不同,接口可以简单地映射到纯粹抽象的特征.
上面的陈述是在讨论可能从Scala中删除泛型的过程中做出的,因为泛型可以做的所有事情也可以通过抽象类型来实现.
在scala中,对象和包的用途几乎相同,对象也称为模块.对象应该被视为模块,因为它们可以包含任何定义,包括其他对象,当然还有类型.
特征可以被认为是一个抽象模块.它可以包含任何定义,任何成员都可以是抽象的,包括类型成员.我正在背诵所有这些只是为了突出对称性.也许OT但对我而言,特征似乎与scala的创新一样,是对象和功能思想的融合.
最后给出答案:
更多评论:在视频中,马丁谈论的特征(抽象模块)不仅仅是具体的模块,因为后者只是出现在最后时刻才能汇集和统一抽象模块的某些组合.
即使不"混合蛋糕",也可以使用抽象模块.例如,在勾画出一些代码时,您可以定义一个包含定义的模块.但是一旦你来到一个类型或值,你还没准备好填写,不要提供像null这样的虚拟.而是将对象切换为特征并将成员保留为抽象.
归档时间: |
|
查看次数: |
1882 次 |
最近记录: |