【问题标题】:Add objects to a mutable list in scala将对象添加到scala中的可变列表
【发布时间】:2014-08-13 12:17:50
【问题描述】:

我一直在尝试将数据添加到 scala 中的可变列表中。

我可以很好地添加基本数据类型,感谢 Alvin Alexanders excellent blog post 使用 ListBuffer 类,但是当涉及到对象时,我不确定如何继续,所以请不要标记为重复还没有。

import scala.collection.mutable.ListBuffer

var fruits = new ListBuffer[String]()
fruits += "Apple"
fruits += "Banana"
fruits += "Orange"

所以,我尝试这样映射:

import scala.collection.mutable.ListBuffer
var fruits = new ListBuffer[MyClass]()
var d1=new MyClass("data1","data2","data3")

fruits += d1

这会产生以下错误:

type mismatch
found: MyClass
required: MyClass

有人可以帮我吗?

【问题讨论】:

  • 这在 REPL 中对我有用,你能添加更详细的描述吗?

标签: scala


【解决方案1】:

无法重现:

Welcome to Scala version 2.10.2 (Java HotSpot(TM) 64-Bit Server VM, Java 1.7.0_25).
Type in expressions to have them evaluated.
Type :help for more information.

scala> :paste
// Entering paste mode (ctrl-D to finish)

import scala.collection.mutable.ListBuffer
var fruits = new ListBuffer[MyClass]()
class MyClass(a:String, b:String, c:String)
var d1=new MyClass("data1","data2","data3")
fruits += d1

// Exiting paste mode, now interpreting.

import scala.collection.mutable.ListBuffer
fruits: scala.collection.mutable.ListBuffer[MyClass] = ListBuffer(MyClass@291c57ba)
defined class MyClass
d1: MyClass = MyClass@291c57ba
res0: scala.collection.mutable.ListBuffer[MyClass] = ListBuffer(MyClass@291c57ba)

编辑:
您可能重新定义了 MyClass 并导致“类型不匹配”错误。也许是这样的:

scala> :paste
// Entering paste mode (ctrl-D to finish)

import scala.collection.mutable.ListBuffer
class MyClass(a:String, b:String, c:String)
var fruits = new ListBuffer[MyClass]()

// Exiting paste mode, now interpreting.

import scala.collection.mutable.ListBuffer
defined class MyClass
fruits: scala.collection.mutable.ListBuffer[MyClass] = ListBuffer()

scala> :paste
// Entering paste mode (ctrl-D to finish)

class MyClass(a:String, b:String, c:String)
var d1=new MyClass("data1","data2","data3")
fruits += d1

// Exiting paste mode, now interpreting.

<console>:14: error: type mismatch;
 found   : MyClass(in object $iw)(in object $iw)(in object $iw)(in object $iw)
 required: MyClass(in object $iw)(in object $iw)(in object $iw)(in object $iw)
              fruits += d1
                        ^

【讨论】:

  • 事情是这样的,我一直在 scala 终端中一一尝试每个命令。现在,我尝试了粘贴方法并且它有效。这里发生了什么?
  • 我猜你有一个旧的 MyClass 实例,然后你重新定义了 MyClass,用新的 MyClass 创建了 ListBuffer 并尝试将旧的 MyClass 实例推到那里。
  • 我每次都重新定义了 MyClass。这不会覆盖旧的吗?
  • 是的,它确实覆盖了类定义,但不是旧 MyClass 的已创建实例,答案已更新。
  • 感谢 :paste 不知道它可以在 REPL 中使用
猜你喜欢
  • 2015-12-16
  • 2020-12-25
  • 2018-01-09
  • 1970-01-01
  • 2014-07-25
  • 1970-01-01
  • 1970-01-01
  • 2023-03-23
  • 1970-01-01
相关资源
最近更新 更多