【发布时间】:2021-03-28 05:44:20
【问题描述】:
如何创建多个本质上是 Ints 的类型,即可以获取 int 值,可以使用 + BUT 等数学运算符,但不能混合不同类型的实例。
例如:
val density1 = new Density(100)
val density2 = new Density(200)
density1 + density2 should be(new Density(300))
val variability = new Variability(1)
variability.value should be(1)
density1 + variability // does not compile
可能有数百种这样的类型,我不想在每个叶类中实现像 + 这样的运算符。
理想情况下,我想避免所有隐式转换机制(仅限个人喜好)。其他类型不应要求更改现有类型。
【问题讨论】:
-
为什么不直接在 Int 上创建一个包装器?
-
Scala 3 正在为这个用例获得opaque types。该页面描述了 Scala 2 的替代方案。
-
@AminMal 据我了解,问题是 如何 在
Int上创建一个包装器,因为“可能有数百种这样的类型,我不想实现每个叶类中的 + 等运算符" -
我确实尝试过创建一个包装器。问题变成了如何混合数学运算符。可能有一种方法可以按特征提取运算符,例如可添加,但构建具有未知类型特征的新实例变得有问题。
-
@KarlBielefeldt opaque types 看起来像是可扩展的解决方案,我可以迁移到 Scala 3。
标签: scala types functional-programming