加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

如何在Scala中转发重复的参数?

发布时间:2020-12-16 19:12:38 所属栏目:安全 来源:网络整理
导读:在 Scala(2.7)中,如果我有这个功能: def foo(args: Array[String]) = for (arg - args) println(arg) 如果我现在尝试定义以下内容: def bar(args: String*) = foo(args) 然后编译器抱怨: console:5: error: type mismatch; found : String* required: Arr
在 Scala(2.7)中,如果我有这个功能:

def foo(args: Array[String]) =
  for (arg <- args) println(arg)

如果我现在尝试定义以下内容:

def bar(args: String*) = foo(args)

然后编译器抱怨:

<console>:5: error: type mismatch;
 found   : String*
 required: Array[String]
       def bar(args: String*) = foo(args)
                                ^

我不明白这个错误,因为编程Scala书中说明函数栏中的args类型实际上是Array [String].我怎么能用重复的参数写这样的包装函数?

解决方法

scala> def foo(args: Array[String]) = for(arg <- args) println(arg)
foo: (args: Array[String])Unit

scala> def bar(args: String*) = foo(args.toArray)
bar: (args: String*)Unit

scala> bar("hello","world")
hello
world

您需要执行上述转换,因为Scala中的varargs实现为Seq,而不是Array.

以下是通常在Scala中转发varargs的方法:

scala> def fooV(args: String*) = args foreach println
fooV: (args: String*)Unit

scala> def fooS(args: Seq[String]) = fooV(args: _*)
fooS: (args: Seq[String])Unit

scala> def bar(args: String*) = fooV(args: _*)
bar: (args: String*)Unit

scala> def barS(args: Seq[String]) = args foreach println
barS: (args: Seq[String])Unit

scala> def barV(args: String*) = barS(args)
barV: (args: String*)Unit

scala> def barV(args: String*) = barS(args.toSeq)
barV: (args: String*)Unit

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读