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;
}

您使用了错误的运算符。你需要使用::. 而且您需要更新内联,因为 aList的长度是不可变的。

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

此外,::操作员将执行前置操作,这意味着您的元素将以相反的顺序排列。

您可以在最后调用 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 回答