我有一个字符串数组,我需要把它们变成带引号的字符串。显然我可以迭代数组并使用"\"%s\"".format(elem)
之类的东西来替换每个元素,但考虑到我的下一步将是arr.mkString("(", "OR", ")")
我尝试按如下方式调整String.format:
val curried = "\"%s\"".format(_)
arr.map(curried)
但这不起作用并抱怨:
found : (Any*) => String
required: (java.lang.String) => ?
如何在字符串数组上映射String.format之类的函数?还有另一种方式来讨论它或者我应该指定类型吗?
答案 0 :(得分:8)
您需要帮助编译一点,并指定所需的类型(至少它是您问题的可能解决方案之一):
val curried = "\"%s\"".format(_: String)
否则编译器将生成Seq[Any] => String
函数,因为format
方法有varargs。
答案 1 :(得分:1)
或许写一个通用的unvararg
。 (将(A*) => B
转换为Seq[A] => B
的函数。)
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")