如何在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 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |