サーチ…


構文

  • クラスメーター(val meters:Double)はAnyValを拡張します
  • タイプメーター=ダブル

備考

ユニットに値クラスを使用するか、ユニット用の専用ライブラリを使用することをお勧めします。

タイプエイリアス

type Meter = Double

このシンプルなアプローチは、 Double他のすべてのタイプがそれと互換性があるように、ユニット処理の重大な欠点を持っています。

type Second = Double
var length: Meter = 3
val duration: Second = 1
length = duration
length = 0d

上記のすべてがコンパイルされます。この場合、ユニットはコードの読者の入出力タイプをマーキングするためにのみ使用できます(インテントのみ)。

バリュークラス

case class Meter(meters: Double) extends AnyVal
case class Gram(grams: Double) extends AnyVal

値クラスは、ユニットをエンコードするための型安全な方法を提供します。

var length = Meter(3)
var weight = Gram(4)
//length = weight //type mismatch; found : Gram required: Meter

AnyVal拡張することにより、JVMレベルでの実行時のペナルティはなく、通常のプリミティブ型(この場合はDouble )です。

他のユニット( Velocity aka MeterPerSecond )を自動的に生成したい場合は、このアプローチは最良ではありませんが、そのような場合にも使用できるライブラリがあります:



Modified text is an extract of the original Stack Overflow Documentation
ライセンスを受けた CC BY-SA 3.0
所属していない Stack Overflow