如何定義foo,以便它可以與任何具有方法math.max的類型一起使用?錯誤指出max不能應用於(A,A)。那麼,如果碰巧是錯誤中提到的任何類型,那麼它可以是,那就是我想要的。這不就是多態類型參數的全部意義嗎?我甚至嘗試過富[A <:數字]但得到相同的錯誤。如何避免「錯誤:重載的方法...與替代方案:」
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)
當然,你的權利。爲了提出我的問題,我只需要一個在它的正文中有一些類型要求的函數來表示我的實際用例。請幫助我瞭解您的解決方案。您爲foo添加了第二個參數列表,以便定義Numeric [A]類型的隱式參數c。那麼你可以在def體中使用c來訪問第一個參數列表中的參數。爲什麼這個工作?它 – user3076170
你對隱式的使用正是我想要的,但我不太明白它爲什麼起作用。你能否向我介紹一下你如何使用隱含的進一步解釋。 @PavelOliynyk如何使用它們是不同的。 – user3076170
它歸結爲咖喱功能。例如,你可以像add(a:Int)(b:Int)= a + b')那樣重寫一個簡單的函數,比如'add(a:Int,b:Int):Int = a + b',然後部分地應用它創建新的函數'add5 = add(5)_',然後像這樣使用'add5(2)// 7'。你也可以這樣做:def addImplicit(a:Int)(implicit b:Int)'。隱式關鍵字告訴編譯器爲特定類型的值搜索隱式作用域。示例'addImplicit(5)//編譯器錯誤 - 找不到Int的implciti值,'隱式val b = 5; addImplicit(5)// 10'。希望這可以幫助 – ddkr