gpt4 book ai didi

scala - 为什么值类仅限于 AnyVal?

转载 作者:行者123 更新时间:2023-12-04 22:06:13 24 4
gpt4 key购买 nike

据我了解,Scala 中的值类只是将原始类型(如 IntBoolean)包装成另一种类型,而不会引入额外的内存使用。所以它们基本上被用作普通类的轻量级替代品。

这让我想起了 Haskell 的 newtype 表示法,它也用于将现有类型包装在新类型中,从而在不消耗额外空间的情况下为某些数据引入新接口(interface)(要查看两种语言的相似性,请考虑例如对一个“构造函数”的限制HaskellScala 中的一个字段)。

我想知道为什么引入由编译器内联的新类型的概念没有推广到 Haskell 为任何类型提供零开销类型包装器的方法。为什么 Scala 人在这里坚持使用原始类型(又名 AnyVal )?

或者 Scala 中是否已经有一种方法可以为 Scala.AnyRef 类型定义此类包装器?

最佳答案

他们不限于AnyVal .

implicit class RichOptionPair[A,B](val o: Option[(A,B)]) extends AnyVal {
def ofold[C](f: (A,B) => C) = o map { case (a,b) => f(a,b) }
}

scala> Some("fish",5).ofold(_ * _)
res0: Option[String] = Some(fishfishfishfishfish)

值类有各种限制,使它们像轻量级包装器一样,但只能包装原语不是其中之一。

关于scala - 为什么值类仅限于 AnyVal?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13780697/

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