1

我不想介意数字的类型。所有数字都可以被视为 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 / 2grouped (n / 2).ceil,部分可能是函数的非整数结果f

grouped f.ceil

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

4

3 回答 3

6
val l = List(1,2,3,4,5) grouped((n + 1) / 2)
于 2013-01-19T04:05:53.990 回答
1

您可以查看数字库Spire,我相信它具有您正在寻找的东西,即能够将数字视为数字,无论它们是 int/double/float/etc。

于 2013-01-20T22:46:28.060 回答
0

办法做到这一点。您可以像这样定义隐式转换:

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

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

于 2013-01-22T04:18:15.087 回答