gpt4 book ai didi

scala - 密封特征的类型安全别名

转载 作者:行者123 更新时间:2023-12-01 08:29:55 25 4
gpt4 key购买 nike

有没有一种方法可以以提供类型安全的方式为密封特征起别名?我知道我可以编写一个案例类或求助于类型类,但这些解决方案对我来说太过分了。

一个简单的例子来说明它:

type Lon = Double
type Lat = Double

def lonLatPair(lon:Lon, lat:Lat):(Lon, Lat) = (lon, lat)

val someLon:Lon = 1.2
val someLat:Lat = 3.4

lonLatPair(someLon, someLat) // Success!
lonLatPair(someLat, someLon) // Dismal failure in the form of a type error

最佳答案

您可以改为声明隐式类:

implicit class Lon(val value: Double) extends AnyVal
implicit class Lat(val value: Double) extends AnyVal

隐式类的优点是您可以在需要 LonLat 时随时使用 double 值 — 这允许您的分配工作,但这可能太宽容取决于您的用例。

extends AnyVal 部分基本上意味着,大多数时候,使用 LonLat 而不是运行时开销 native 类型 Double

或者,您可以使用 Scalaz ( example ) 或 shapeless ( example ) 的“未装箱新类型”技术。

关于scala - 密封特征的类型安全别名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18551090/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com