相关疑难解决方法(0)

什么`:_*`(冒号下划线星)在Scala中做什么?

我从这个问题得到以下代码:

def addChild(n: Node, newChild: Node) = n match {
  case Elem(prefix, label, attribs, scope, child @ _*) => Elem(prefix, label, attribs, scope, child ++ newChild : _*)
  case _ => error("Can only add children to elements!")
}
Run Code Online (Sandbox Code Playgroud)

除此之外,其中的所有内容都非常清晰: child ++ newChild : _*

它有什么作用?

我明白有Seq[Node]与另一个连接Node,然后呢?怎么: _*办?

scala pattern-matching

186
推荐指数
4
解决办法
4万
查看次数

如何使用Java代码中的Scala varargs

有很多关于从Scala代码调用Java varargs的文章,但我唯一能找到相反的方法就是这个问题:在java中使用scala vararg方法,它没有任何具体的例子.

我试图使用scala.Console一些Java代码,因为它java.io.Console在Eclipse中不起作用,而Scala则起作用.但我无法得到这种方法

def readLine (text: String, args: Any*): String
Run Code Online (Sandbox Code Playgroud)

工作,因为它似乎期待scala.collection.Seq[Any]第二个参数,我不知道如何Seq在Java中创建 .我该如何解决这个问题?

我试过的事情:

1)使用null

// Java
String s = scala.Console.readLine("Enter text: ", null);
Run Code Online (Sandbox Code Playgroud)

- 获得奖励NullPointerException.

2)替换nullwith scala.collection.Seq.empty(),但javac会报告各种错误,例如Seq没有empty方法.

3)Nilscala.collection.immutable包对象中使用对象,但是这里建议的语法是scala.collection.immutable.package$Nil$.MODULE$,但是无法解决.

当然我可以使用readLine()不采用varargs 的方法,但这太容易了.

java console scala scala-java-interop

19
推荐指数
1
解决办法
3041
查看次数