在scala中我可以将重复的参数传递给其他方法吗?
这是我可以在 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 是一些非字符串结构。
现在我只是传递数组。使用带星号的参数会非常好。有什么办法可以做到吗?
Here is something I can do in java, take the results of a repeated parameter and pass it to another method:
public void foo(String ... args){bar(args);}
public void bar(String ... args){System.out.println("count="+args.length);}
In scala it would look like this:
def foo(args:String*) = bar(args)
def bar(args:String*) = println("count="+args.length)
But this won't compile, the bar signature expects a series of individual strings, and the args passed in is some non-string structure.
For now I'm just passing around arrays. It would be very nice to use starred parameters. Is there some way to do it?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
Java 假设您希望自动将数组
args
转换为可变参数,但这对于接受对象类型可变参数的方法可能会出现问题。Scala 要求您通过使用
: _*
指定参数来明确说明。您可以在
Seq
的任何子类型上使用: _*
,或者在任何可隐式转换为Seq
的内容上使用: _*
,特别是Array
>。语言参考第 4.6 节中的示例对此进行了很好的解释.2.
请注意,这些示例是使用 Scala 2.8.0.RC2 编写的。
Java makes an assumption that you want to automatically convert the Array
args
to varargs, but this can be problematic with methods that accept varargs of type Object.Scala requires that you be explicit, by ascribing the argument with
: _*
.You can use
: _*
on any subtype ofSeq
, or on anything implicitly convertable to aSeq
, notablyArray
.It is explained well with examples in the Language Reference, in section 4.6.2.
Note that these examples are made with Scala 2.8.0.RC2.