在scala中向全局列表对象添加元素

时间:2013-05-14 23:42:17

标签: list 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
  } 

1 个答案:

答案 0 :(得分:1)

严格回答您的问题:

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

您使用的操作符错误。您需要使用::。并且您需要更新内联,因为List具有不可变长度。

我正在切换elstrList,因为::是右关联的,这意味着该方法来自::运算符右侧的对象。 / p>

此外,::运算符将执行前置,这意味着您的元素将以相反的顺序。

你可以在结束时(在使用之前等)调用reverse,或者如果你想在语义上类似于Java ArrayList,也许可以考虑Scala ListBuffer,一个可以追加的可变集合。

import scala.collection.mutable.ListBuffer;
private var strList: ListBuffer[String] = Nil
def add(el: String) {
       strList += el;
}