我从这个问题得到以下代码:
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
,然后呢?怎么: _*
办?
给定一个带有可变数量参数的函数,例如
def foo(os: String*) =
println(os.toList)
Run Code Online (Sandbox Code Playgroud)
如何将一系列参数传递给函数?我想写:
val args = Seq("hi", "there")
foo(args)
Run Code Online (Sandbox Code Playgroud)
显然,这不起作用.
我有一个函数叫做or
例如,定义为;
or(filters: FilterDefinition*)
Run Code Online (Sandbox Code Playgroud)
然后我有一个清单:
List(X, Y, Z)
Run Code Online (Sandbox Code Playgroud)
我现在需要做的是调用or
像
or(func(X), func(Y), func(Z))
Run Code Online (Sandbox Code Playgroud)
正如预期的那样,列表的长度可能会发生变化.
在Scala中执行此操作的最佳方法是什么?
我有一个类型列表,List(String,String)
我想将其转换为地图.当我使用toMap
方法时,我发现它没有保留List中的数据顺序.但是我的目标是通过保持数据的顺序与List相同,将列表转换为Map.我学会了ListMap
保留插入顺序(但它是不可变的)所以我可以使用带有map函数的LinkedHashMap顺序插入数据,LinkedHashMap
但这意味着我需要遍历所有痛苦的元素.任何人都可以建议我一个更好的方法吗?谢谢
我想从scala调用以下java方法:
protected final FilterKeyBindingBuilder filter(String urlPattern, String... morePatterns) {
return filtersModuleBuilder.filter(Lists.newArrayList(urlPattern, morePatterns));
}
Run Code Online (Sandbox Code Playgroud)
我的scala来电看起来像这样
def test(url: String, urls: String*) {
filter(url, urls: _*).through(classOf[MyTestWhateverFilter])
}
Run Code Online (Sandbox Code Playgroud)
但是,编译时执行代码会产生异常:
java.lang.ClassCastException: scala.collection.mutable.WrappedArray$ofRef cannot be cast to [Ljava.lang.String;
Run Code Online (Sandbox Code Playgroud)
我也试过这个:
def test(url: String, urls: String*) {
filter(url, urls.map(_.asInstanceOf[java.lang.String]) :_*).through(classOf[MyTestWhateverFilter])
}
Run Code Online (Sandbox Code Playgroud)
在这种情况下,例外是:
java.lang.ClassCastException: scala.collection.mutable.ArrayBuffer cannot be cast to [Ljava.lang.String;
Run Code Online (Sandbox Code Playgroud)
我认为在2.8中,Array [String]作为String []数组传递给java,并且不需要额外的拆箱.
有任何想法吗?
提前致谢!
编辑:
如何复制它:
import com.google.inject.servlet.ServletModule
trait ScalaServletModule extends ServletModule{
def test(s: String,strs: String*) = {
println(strs.getClass)
println(super.filter(s,strs:_*))
}
}
object Test {
def main(args: Array[String]) …
Run Code Online (Sandbox Code Playgroud)