在scala中我可以将重复的参数传递给其他方法吗?
Posted
技术标签:
【中文标题】在scala中我可以将重复的参数传递给其他方法吗?【英文标题】:In scala can I pass repeated parameters to other methods? 【发布时间】:2011-02-19 15:03:03 【问题描述】:这是我可以在 java 中做的事情,获取重复参数的结果并将其传递给另一个方法:
public void foo(String ... args)bar(args);
public void bar(String ... args)System.out.println("count="+args.length);
在 scala 中它看起来像这样:
def foo(args:String*) = bar(args)
def bar(args:String*) = println("count="+args.length)
但这不会编译,bar 签名需要一系列单独的字符串,而传入的 args 是一些非字符串结构。
现在我只是传递数组。使用星号参数会非常好。有什么办法吗?
【问题讨论】:
【参考方案1】:Java 假设您希望将数组 args
自动转换为可变参数,但这对于接受 Object 类型可变参数的方法可能会出现问题。
Scala 要求您通过使用: _*
赋予参数来明确说明。
scala> def bar(args:String*) = println("count="+args.length)
bar: (args: String*)Unit
scala> def foo(args:String*) = bar(args: _*)
foo: (args: String*)Unit
scala> foo("1", "2")
count=2
您可以在Seq
的任何子类型上使用: _*
,或者在任何可隐式转换为Seq
的东西上使用: _*
,尤其是Array
。
scala> def foo(is: Int*) = is.length
foo: (is: Int*)Int
scala> foo(1, 2, 3)
res0: Int = 3
scala> foo(Seq(1, 2, 3): _*)
res1: Int = 3
scala> foo(List(1, 2, 3): _*)
res2: Int = 3
scala> foo(Array(1, 2, 3): _*)
res3: Int = 3
scala> import collection.JavaConversions._
import collection.JavaConversions._
scala> foo(java.util.Arrays.asList(1, 2, 3): _*)
res6: Int = 3
在Language Reference 的4.6.2 节中通过示例很好地解释了这一点。
请注意,这些示例是使用 Scala 2.8.0.RC2 制作的。
【讨论】:
以上是关于在scala中我可以将重复的参数传递给其他方法吗?的主要内容,如果未能解决你的问题,请参考以下文章
除了通过 main 的 argv 之外,还有其他方法可以将用户参数传递给程序吗?