Using varargs from Scala

回眸只為那壹抹淺笑 提交于 2019-12-17 08:55:46

问题


I'm tearing my hair out trying to figure out how to do the following:

def foo(msf: String, o: Any, os: Any*) = {
    println( String.format(msf, o :: List(os:_*)) )
}

There's a reason why I have to declare the method with an o and an os Seq separately. Basically, I end up with the format method called with a single object parameter (of type List). Attempting:

def foo(msf: String, o: Any, os: Any*) = {
    println( String.format(msf, (o :: List(os:_*))).toArray )
}

Gives me the type error:

found: Array[Any]

required Seq[java.lang.Object]

I've tried casting, which compiles but fails for pretty much the same reason as the first example. When I try

println(String.format(msg, (o :: List(os:_*)) :_* ))

this fails to compile with implicit conversion ambiguity (any2ArrowAssoc and any2stringadd)


回答1:


def foo(msf: String, o: AnyRef, os: AnyRef*) = 
  println( String.format(msf, (o :: os.toList).toArray : _* ))



回答2:


def foo(msf: String, o: AnyRef, os: AnyRef*) =
  println( String.format(msf, o :: os.toList : _* ) )

or

def foo(msf: String, o: AnyRef, os: AnyRef*) =
      println( msf format (o :: os.toList : _* ) )

I much prefer the latter, though it has no locale* support.

  • Scala 2.8 does have locale support with RichString's format.


来源:https://stackoverflow.com/questions/1008783/using-varargs-from-scala

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!