Scala 如何区分组合和自类型用例
Scala有两种表示对象组合的工具:原始的自我类型概念和众所周知的琐碎组合。我很好奇在什么情况下我应该用什么 它们的适用性存在明显差异。自我类型要求你使用特质。对象组合允许您使用var声明在运行时更改扩展 撇开技术细节不谈,我可以找出两个指标来帮助分类用例。如果某个对象用作复杂结构(如树)的组合器,或者只是有几个类似类型的零件(1辆车到4个车轮的关系),则应使用组合。有一个极端相反的用例。让我们假设一个特征变得太大而无法清晰地观察到,然后它就分裂了。在这种情况下,使用self类型是很自然的 这些规则不是绝对的。您可以做额外的工作来在这两种技术之间转换代码。e、 g.您可以在产品4上用自打字代替4轮组合。您可以使用Scala 如何区分组合和自类型用例,scala,composition,self-type,Scala,Composition,Self Type,Scala有两种表示对象组合的工具:原始的自我类型概念和众所周知的琐碎组合。我很好奇在什么情况下我应该用什么 它们的适用性存在明显差异。自我类型要求你使用特质。对象组合允许您使用var声明在运行时更改扩展 撇开技术细节不谈,我可以找出两个指标来帮助分类用例。如果某个对象用作复杂结构(如树)的组合器,或者只是有几个类似类型的零件(1辆车到4个车轮的关系),则应使用组合。有一个极端相反的用例。让我们假设一个特征变得太大而无法清晰地观察到,然后它就分裂了。在这种情况下,使用self类型是很自然的 这些
Cake[T}
作为Cake模式的依赖项,但这两种情况似乎都违反直觉,给了您额外的工作
虽然有很多边界用例。一对一的关系很难确定。有没有简单的规则来决定哪种技术更可取
self-type让你的类变得抽象,composition让你的代码变得冗长。self-type让你在混合名称空间方面遇到问题,还免费给你额外的键入(你得到的不仅仅是两个元素的混合物,还有汽油弹)
我如何在它们之间进行选择?有什么提示
更新:
让我们讨论以下示例:
适配器模式。selt类型和组合方法有什么好处?下面的提示来自启发式方法(当算法方法不可行时使用的解决问题的试错方法),不受任何公式(基于数学的推理)的支持 ***这里给出的提示应该参考附带的提示进行评估,没有提示是区分组合和自类型用例的完美规则 (虽然遵循下面提到的提示,但我并不关心或关注代码的冗长性、行数或编程工作输入。) 组合(字典的意思):将部分或元素组合成一个整体的行为(琐碎的组合) 特征(字典上的意思):一种显著的特征或品质 琐碎成分的提示(可通过超子类机制或关联关系实现)(如汽车和车轮):
- 可离散计算的(如车轮)
- 可进一步分类(根据不同标准)(例如车轮-合金车轮、钢车轮等)
- 可以添加或删除(注意:当我们说车轮停止时,实际上是车轮的转速停止,当我们说心脏停止时,实际上是心脏的脉动速度变为零)
- 通常适用于少数情况(在宇宙中,有些车辆和机器有轮子) (很少有可能是10-15年或数百万年——为了解释,让我们理解这一说法:当地质学家谈论时间时,说一段时间以前,它意味着几百万年前,这取决于实际的主题)
- 它是一维的(不是物理方面的),可以绘制在数字线上(无论物理单位是什么)(例如速度)
- 无法进一步自然分类的(例如速度)(或者至少您不会进一步分类)在这里,这个词很自然地表达了这样一种含义:要对它进行分类,你必须根据你自己的标准,并且有一定的可能性将它分为数百万个亚类型。采取行动,你可以有数百万个移动子特征…如之字形移动、旋转和前进,。。。(各种排列组合的可能性为百万)
- 可以增加、减少或停止(如速度、愤怒、爱等)
- 通常可以在距离较远的班级看到(例如光速、地球速度、跑步者速度)
- 通常适用于许多(宇宙中大多数(这里每个)物体都有速度) 软件开发就像创造你自己的宇宙,作为创造者,你定义了一切。在你的领域(你自己的宇宙)中,在遥远的类中会发现一个特征