作为 Scala 的新手,我一直在玩fold
,reduce
和scan
. 我想看看在函数参数上传递元素的顺序以及最终结果是如何组装的。由于我计划在数字和字符串列表中使用它,因此我使用类型参数定义了以下辅助函数:
scala> def vizAdd[A](p1:A, p2:A):A = {
| val res:A = p1 + p2
| println( s" * ($p1, $p2) => $res" )
| res
| }
<console>:8: error: type mismatch;
found : A
required: String
val res = p1 + p2
^
Post Addition with generic type parameter in Scala提出了一个解决方案,重点是 + 方法应该需要一个数字类型来操作,所以在方法中添加一个类型为 Numeric[A] 的隐式参数应该可以解决问题。很遗憾:
scala> def vizAdd[A](p1:A, p2:A)(implicit n: Numeric[A]):A = {
| val res:A = p1 + p2
| println( s" * ($p1, $p2) => $res" )
| res
| }
<console>:8: error: type mismatch;
found : A
required: String
val res:A = p1 + p2
^
[A:Numeric]
用代替的语法(implicit n: Numeric[A])
也不起作用......
编译上述帖子(下面的代码)中实现的单例对象“GenericTest”会导致相同的错误:“found: A, required: String”。
object GenericTest extends App {
def func1[A](x: A, y: A)(implicit n: Numeric[A]): A = x + y
}
我在这里想念什么?
我正在使用 Scala 2.11.5