【问题标题】:Scala error: overloaded method value + with alternatives:Scala错误:重载的方法值+有替代品:
【发布时间】:2016-11-02 02:39:00
【问题描述】:

为什么会出现以下错误?我以为我在指定一个 作为 Int 并且还将返回值指定为 Int。

scala> def adds[A](x: A,y: A)(implicit a:Int = 0 ):Int = a + x + y

<console>:15: error: overloaded method value + with alternatives:
  (x: Double)Double <and>
  (x: Float)Float <and>
  (x: Long)Long <and>
  (x: Int)Int <and>
  (x: Char)Int <and>
  (x: Short)Int <and>
  (x: Byte)Int <and>
  (x: String)String
 cannot be applied to (A)
       def adds[A](x: A,y: A)(implicit a:Int = 0 ):Int = a + x + y

【问题讨论】:

    标签: scala


    【解决方案1】:

    您实际上将a 指定为Int,并将返回值指定为Int。但它无法编译,因为泛型类型 A 可能是类型 MyClass,例如,没有方法 +。

    例如,如果你这样做,你期望什么:

    case class MyClass(a: String)
    
    adds[MyClass](MyClass("a"), MyClass("b"))
    

    【讨论】:

    • 有点令人困惑的是,错误是在谈论重载和替代方案,而不是关于 + 缺失。
    • 它说不能重载这些类型和类型A的+方法,因为例如Int的方法+不能应用于类型A。
    • 感谢有道理。
    猜你喜欢
    • 1970-01-01
    • 2019-07-10
    • 1970-01-01
    • 2017-10-09
    • 1970-01-01
    • 1970-01-01
    • 2018-12-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多