Scala 如何使用String.format函数将其与数组上的映射一起使用?

Scala 如何使用String.format函数将其与数组上的映射一起使用?,scala,Scala,我有一个字符串数组,需要将它们转换为带引号的字符串。显然,我可以迭代数组,使用类似于“\%s\”.format(elem)的东西来替换每个元素,但考虑到我的下一步将是arr.mkString(“(”,“或“,”)”) 我尝试按如下方式使用curry String.format: val curried = "\"%s\"".format(_) arr.map(curried) 但这不起作用,并引起抱怨: found : (Any*) => String required: (ja

我有一个字符串数组,需要将它们转换为带引号的字符串。显然,我可以迭代数组,使用类似于
“\%s\”.format(elem)
的东西来替换每个元素,但考虑到我的下一步将是
arr.mkString(“(”,“或“,”)”)

我尝试按如下方式使用curry String.format:

val curried = "\"%s\"".format(_)
arr.map(curried)
但这不起作用,并引起抱怨:

 found   : (Any*) => String
 required: (java.lang.String) => ?

如何将String.format之类的函数映射到字符串数组?是否有其他方法来解决此问题,或者我是否应该指定类型?

您需要稍微帮助编译器,并指定所需的类型(至少这是解决问题的可能方法之一):


否则,编译器将生成
Seq[Any]=>String
函数,因为
format
方法具有varargs。

可能是通过编写泛型
unvararg
来实现的。(将
(A*)=>B
转换为
Seq[A]=>B
的函数)


format
收到一个vararg,所以你不能真的把它做成咖喱。太好了。这非常有效,我现在明白了它到底在做什么。似乎Scala 2.10.0-M1使
unvararg
变得不必要了。对于以下示例:
scala>val curried=“\%s\”。format(
REPL返回
curried:Seq[Any]=>String=
,但scala 2.9.1将打印
curried:Any*=>String=
val curried = "\"%s\"".format(_: String) 
scala> def unvararg[A, B](f: (A*) => B): Seq[A] => B = x => f(x: _*)
unvararg: [A, B](f: A* => B)Seq[A] => B

scala> def seqSingleton[A](x: A): Seq[A] = Seq(x)
seqSingleton: [A](x: A)Seq[A]

scala> val ss = Array("hello", "world")
ss: Array[java.lang.String] = Array(hello, world) 

scala> ss.map((seqSingleton[String] _) andThen unvararg("\"%s\"".format))
res8: Array[String] = Array("hello", "world")