在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 之外,还有其他方法可以将用户参数传递给程序吗?

如何将参数传递给scala中的方法

我可以将数组和变量作为参数传递给 C# 中的方法吗? [复制]

如何将参数传递给控制器 构造函数?这是正确的做法吗?

我们可以将参数传递给 dart 中的引用方法吗?