【发布时间】:2015-04-03 00:31:37
【问题描述】:
我是 scala 的新手,并试图理解思考子类型的正确方法,所以这里有一个简单的例子。
假设我想创建一个函数truncation(),它接受一个数字并将其四舍五入到小数位并返回结果。我可能会这样做,
def truncation(number:Double, level:Int)={
math.floor(number * math.pow(10,level)) / math.pow(10,level)
}
truncation(1.2345, 2)
res0: Double = 1.23
但我可能还希望这个函数能够与Double 之外的其他数字类型一起使用,例如Float。
那么我应该如何考虑将这个函数泛化为适用于多种类型呢?
我在想我应该使用诸如
之类的泛型类型def truncation [A](number:A, level:Int):A={
math.floor(number * math.pow(10,level)) / math.pow(10,level)
}
但这不会编译。
在只有两种类型的情况下,我看到Either 类型is a good option。但在更一般的情况下,也许我也希望能够处理Ints,并且在输入对象的类型上具有match 的不同实现。
思考这个问题的最佳方式是什么?谢谢你的帮助。
【问题讨论】:
-
这听起来像是 Scala 类型类的情况。你应该搜索它并阅读它的教程。
-
类似这个链接的东西:danielwestheide.com/blog/2013/02/06/…
-
感谢@cmbaxter!我实际上只是偶然发现了这个。我会通读这个并想出一个答案
标签: scala