6

数字だけでなくリストに追加して反対しようとしているので、例で返信するときに、私の中古車の例や果物などのオブジェクトを使用できるかどうか、私が見ているすべての場所とすべての例を探してきましたリストに数字を追加するだけです。
私はいくつかのJavaコードをscalaに変換しようとしていますが、変換に問題があるJavaコードは

ArrayList usedCarList = new ArrayList();
UsedCars usedCar = new UsedCars();
usedCarList.add(usedCar);

今、私はいくつかの例を見てきましたが、オブジェクトを使用しようとすると動作しないようです.

var b = List[Int](); 
b ::= 1; 
b ::= 2; 
b ::= 3; 

私はいくつかのことを試しました 1 以下にリストされています。

var usedCarList = List();
def addCar (usedCarList: List[UsedCars]){
var usedCar = new UsedCars();
series of set operations on the usedCar
usedCar :: usedCarList;
println(usedCarList.length);
}

リストのサイズを確認すると、常に空です

4

2 に答える 2

8

可変リスト ( などscala.collection.mutable.MutableList) と不変リスト ( scala.collection.immutable.List) があります。使用しているのは不変リストであるため::、要素を呼び出すだけで、実際には要素が追加された新しいインスタンスが返されますが、基になる値は変更されません。var不変リストでa を使用するか、次のように可変リストを使用する必要があります。

scala> import scala.collection._
import scala.collection._

scala> val list = mutable.MutableList[UsedCars]()
list: scala.collection.mutable.MutableList[UsedCars] = MutableList()

scala> list += new UsedCars()
res0: list.type = MutableList(UsedCars@4bfa79c8)

scala> list.size
res1: Int = 1

不変リストを使用して参照を再割り当てするための su- の回答を参照してください。

于 2013-04-01T20:12:03.567 に答える
6

ListScalaと Javaには根本的な違いがありますArrayList。ScalaListは不変です。

単に読み取り専用ではありません。Java の読み取り専用コレクションは、それを作成した人によって変更される可能性があります。Scala では、 aはListにも変更できません。

それでは、「機能する」ことを示した例と調整しましょうb ::= 1。その例は と同等b = 1 :: bであるため、リストは変更されません。代わりに、新しいリストを作成し、それを に割り当てていbます。非効率に聞こえるかもしれませんが、永続的なデータ構造であるため、実際には非常に高速ですList(詳細については、それを調べてください)。

したがって、あなたの質問に対する最も明白な答えは、異なる種類のデータ構造を使用することです。Scala で最も近いものArrayListArrayBuffer.

ただし、追求される可能性のある別の可能性があります。リストを変更して何も返さない代わりに、新しいリストを返します。そのためには、コードの構造に他の変更が必要になる可能性がありますが、それについての詳細がないため、それらが何であるかについては推測しません。

于 2013-04-02T02:58:56.560 に答える