有没有办法避免在Scala中转换数字类型?我应该使用Numeric,Integral吗?

时间:2013-01-19 03:48:00

标签: scala types casting

我想不介意数字的类型。 所有数字都可以视为Double, 但是我想知道使用数字作为数字的更好的scalaish方式。

这只是一个例子,假设我有以下内容:

val n = 5
val l = List(1,2,3,4,5) grouped (n / 2d).ceil.toInt

有没有办法做到(完全):

val l = List(1,2,3,4,5) grouped (n / 2).ceil

由于“分组”参数的类型不匹配而没有编译错误?

修改

n / 2部分中的grouped (n / 2).ceil在另一个示例中可能是函数f的非整数结果:

grouped f.ceil

它仍然需要类型转换,或者在所有情况下都有一个技巧或设计模式来避免它?

3 个答案:

答案 0 :(得分:6)

val l = List(1,2,3,4,5) grouped((n + 1) / 2)

答案 1 :(得分:1)

你可以查看数字库Spire,我相信它有你想要的东西,即将数字视为数字的能力,无论它们是int / double / float /等。

答案 2 :(得分:0)

是一种方法。您可以像这样定义隐式转换:

implicit def double2Int(d: Double): Int = d.toInt

一旦进入范围,它会自动将Double转换为Int。但是,不建议这样做,因为您失去了类型安全性。