【问题标题】:Type mismatch when using + operator使用 + 运算符时类型不匹配
【发布时间】:2016-06-21 15:38:11
【问题描述】:

我目前正在尝试学习如何使用 Scala,但遇到了一些语法问题。

当我输入 scala 提示符时:

import scala.collection.immutable._
var q = Queue[Int](1)
println((q+1).toString)

我收到以下错误:

<console>:12: error: type mismatch;
 found   : Int(1)
 required: String
              println((q+1).toString)

我只是想使用下面定义的队列的重载+运算符:

def +[B >: A](elem : B) : 队列[B] 创建一个新队列,在旧队列末尾添加元素。 参数 elem - 要插入的元素

但似乎 scala 进行了字符串连接。那么,您能帮我理解如何将元素添加到队列中(不使用完美工作的 enqueue;我想使用 + 运算符)吗?也许,你能给我解释一下对于初学者来说似乎有点奇怪的行为吗?

谢谢

【问题讨论】:

  • 你从哪里得到这个定义?它与当前文档不一致
  • 该方法来自一些旧版本的 Scala。它在 2.9 中被删除。使用更新的文档。
  • 非常感谢。 Google 将scala-lang.org/api/2.5.0/scala/collection/immutable/Queue.html 作为“scala queue immutable”的第二个结果。我没有那么小心,我没有注意到它是针对 2.5 版的。我高估了谷歌搜索引擎的力量:)

标签: scala overloading operator-keyword


【解决方案1】:

您使用了错误的运算符(请参阅docs):

scala> var q = Queue[Int](1)
q: scala.collection.immutable.Queue[Int] = Queue(1)

scala> q :+ 2
res1: scala.collection.immutable.Queue[Int] = Queue(1, 2)

scala> 0 +: q
res2: scala.collection.immutable.Queue[Int] = Queue(0, 1)

由于+ 运算符对于这些类型没有其他意义,Scala 默认为字符串连接,给您类型不匹配错误。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-03-12
    • 2013-09-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多