如何定义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)
答案 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]
依旧......