2014-08-13 3 views
0

Я пытался добавить данные в изменяемый список в scala.Добавить объекты в изменяемый список в 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 

Может кто-нибудь помочь мне здесь?

+0

Это работает для меня в REPL, можете ли вы добавить более подробное описание? –

ответ

2

Невозможно воспроизвести:

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([email protected]) 
defined class MyClass 
d1: MyClass = [email protected] 
res0: scala.collection.mutable.ListBuffer[MyClass] = ListBuffer([email protected]) 

EDIT:
Вы можете повторно определить 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 
         ^
+0

Вот что, я пробовал каждую команду один за другим в терминале scala. Теперь я попробовал метод paste, и он работает. Что тут происходит? –

+0

Я бы предположил, что у вас был старый экземпляр MyClass, затем вы переопределили MyClass, создали ListBuffer с новым MyClass и попытались нажать там старый экземпляр MyClass. – monnef

+0

Я переопределял MyClass каждый раз. Разве это не отменяет старый? –

Смежные вопросы