Scala: 2つのLong値を安全に足す
Long の足し算でオーバーフロー/アンダーフローが発生するかどうか検知したい。
BigInt に変換してから値を足し込み、有効な Long値かチェックする。
1 2 | def safeAddition(a : Long, b : Long) : Option[Long] = Some(BigInt(a) + BigInt(b)).withFilter( _ .isValidLong).map( _ .toLong) |
実行例
scala> safeAddition(Long.MaxValue, 0) res0: Option[Long] = Some(9223372036854775807) scala> safeAddition(Long.MaxValue, 1) res1: Option[Long] = None scala> safeAddition(-1, Long.MinValue) res2: Option[Long] = None scala> safeAddition(Long.MaxValue, Long.MinValue) res3: Option[Long] = Some(-1) |
0 件のコメント:
コメントを投稿