Scala Language
荷役単位(指標)
サーチ…
構文
- クラスメーター(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