私が理解している限り、Scalaの値クラスは、追加のメモリ使用量を導入することなく、プリミティブ型を別の型のようにInt
、または別の型にラップするためのものです。Boolean
したがって、これらは基本的に通常のクラスの軽量な代替手段として使用されます。
newtype
これは、既存の型を新しい型にラップするためにも使用されるHaskellの表記法を思い出させます。したがって、追加のスペースを消費することなく、一部のデータに新しいインターフェイスを導入します(両方の言語の類似性を確認するには、たとえば、1つの「コンストラクター」と1つの「コンストラクター」への制限を考慮してください。 HaskellとScalaの両方のフィールド)。
私が疑問に思っているのは、コンパイラーによってインライン化される新しい型を導入するという概念が、あらゆる種類の型に対してオーバーヘッドがゼロの型ラッパーを持つというHaskellのアプローチに一般化されていない理由です。なぜScalaの人たちはAnyVal
ここでプリミティブ型(別名)に固執したのですか?
それとも、Scalaにそのような型のラッパーを定義する方法はすでにありScala.AnyRef
ますか?