如何避免“错误:重载方法...与替代方案:”

时间:2016-03-16 15:45:02

标签: scala

如何定义foo以使其适用于具有math.max方法的任何类型?该错误表明max不能应用于(A,A)。好吧,如果A碰巧是错误中提到的任何类型,那么它可能就是我想要的。这不是多态类型参数的全部意义吗?我甚至试过foo [A&lt ;: Numeric],但得到了同样的错误。

scala> def foo[A](a: A, b: A) = math.max(a,b)
<console>:9: error: overloaded method value max with alternatives:
(x: Double,y: Double)Double <and>
(x: Float,y: Float)Float <and>
(x: Long,y: Long)Long <and>
(x: Int,y: Int)Int
 cannot be applied to (A, A)
       def foo[A](a: A, b: A) = math.max(a,b)

2 个答案:

答案 0 :(得分:0)

昨天我确实问了同样的问题。 您需要实现隐式转换! 见下面的链接。希望这会有所帮助。

scala: operation overload and implicit conversion clarification

答案 1 :(得分:0)

我不确定你为什么要这样做。 math.max工作得很好,没有包装成任何东西,但如果你绝对必须,那么解决方案将看起来像这样

   def foo[A](a:A,b:A)(implicit c:Numeric[A]) = c.max(a,b)
   foo(1,2) //2 
   foo('a',4l) //97 
   foo('g',"1") //  error: could not find implicit value for parameter c: Numeric[Any]

依旧......