2

この質問がすでに尋ねられている場合は、申し訳ありません。さらに別の Scala 初心者の質問。たとえば、プレースホルダーコンテナーとして使用できるグローバル List オブジェクトが必要な場合、Java では簡単に実行できます。

//share list object
private List<String> strList = new ArrayList<>();
void add(String el)
{
 strList.add(e);
}

static void main(String[] args) { 
{
  add("36 Chambers");
  out.println(strList.get(0));//assume only element
}

同様に、Scala で同じ構文をシミュレートすると、最終的にjava.lang.IndexOutOfBoundsException: 0. 単純な Scala でどのように同様のことを達成できますか?

  private var strList: List[String] = Nil
  def add(el: String) {
    strList :+ el
  }

  def main(args: Array[String]) {   
    add("36 Chambers")
    println(s(0)) //assume only element
  } 
4

1 に答える 1

1

あなたの質問に厳密に答えるには:

private var strList: List[String] = Nil
def add(el: String) {
       strList = el :: strList;
}

間違った演算子を使用しています。を使用する必要があります::Listaは不変の長さであるため、インラインで更新する必要があります。

eland を切り替えているのは、右結合であるstrListため::です。これは、メソッドがオブジェクトから::演算子の右側に来ることを意味します。

また、::オペレーターは前置を実行します。これは、要素が逆順になることを意味します。

最後に(使用前などに) reverse を呼び出すか、意味的にJavaに似たものが必要な場合は、追加できる可変コレクションでArrayListある Scala を検討してください。ListBuffer

import scala.collection.mutable.ListBuffer;
private var strList: ListBuffer[String] = Nil
def add(el: String) {
       strList += el;
}
于 2013-05-14T23:46:43.970 に答える