ビデオテープ、ええと、仕様 12.2 に行きましょう。
値クラスは、インスタンスが基礎となるホスト システムによってオブジェクトとして表されないクラスです。すべての値クラスはクラス AnyVal から継承します。
ですから、おそらく問題は、すべてがオブジェクトである場合、何かが表現されていない、つまりオブジェクトとして実装されていなくても、なぜ気にするのでしょうか? それが実装の詳細の実装です。
しかし、ふりをしないでください、もちろん気にします。あなたは決して専門化しませんか?
仕様は続きます:
Scala の実装では、Unit、Boolean、Double、Float、Long、Int、Char、Short、および Byte の値クラスを提供する必要があります (ただし、他のクラスも自由に提供できます)。
したがって、必要な値クラスの列挙に加えて、AnyVal のテストは意味があります。
とはいえ、拡張メソッドに値クラスを使用していない場合、実際には生きていないため、@drexin の回答を受け入れる必要があります。(それを生きるという意味で。)
SIP からの動機:
...完全にインライン化できる Scala のクラス。したがって、これらのクラスの操作は、外部メソッドと比較してオーバーヘッドがありません。インライン化されたクラスの使用例は次のとおりです。
- インライン化された暗黙のラッパー。これらのラッパーのメソッドは、拡張メソッドに変換されます。
- unsigned int などの新しい数値クラス。そのようなクラスのボクシング オーバーヘッドはもはや必要ありません。したがって、これは .NET の値クラスに似ています。
- 測定単位を表すクラス。繰り返しますが、これらのクラスではボクシング オーバーヘッドは発生しません。
拡張メソッド自体を @inline としてマークすると、すべてがインライン化されます。オブジェクト ラッパーがなく、小さなメソッドがインライン化されます。
私は毎日この機能を使用しています。昨日、私はそれにバグを見つけました。バグはすでに修正されています。つまり、これは非常に優れた機能であり、Scala 関係者は、Coursera から時間をかけてバグを修正するでしょう。
そういえば、聞くのを忘れていましたが、これは Coursera のクイズの質問ではありませんよね?