Scala String格式命名参数(Winner:Ugliest Code)

时间:2011-04-28 19:01:09

标签: string scala named-parameters

我想出了一个在Scala中使用命名参数的技巧。有没有更好的办法?有什么缺点?

<x>
  |CREATE OR REPLACE FUNCTION myFunction({columns.map(column => column.name).
                                          mkString(",\n")})
  |RETURNS BOOLEAN AS $$
  |BEGIN
  | -- more stuff
  |END;
  |$$ LANGUAGE 'plpgsql';
  |</x>.text.stripMargin

注意XML正文中的&符号;它们需要“引用”为&amp;或放在像{"&"}这样的大括号中。我是否因为丑陋的代码而获奖? : - )

3 个答案:

答案 0 :(得分:2)

我认为如果您需要这种规模的字符串格式化程序,则需要Builder或模板引擎,例如Velocity。顺便说一句,我发现Scala对构建器和DSL很有用。

答案 1 :(得分:2)

如果您不介意编译器插件,请尝试使用Johannes Rudolph的Scala Enhanced Strings。我很喜欢它。

答案 2 :(得分:2)

好消息! Scala 2.10.0引入了真正的函数字符串插值!

文档可在此处找到:http://docs.scala-lang.org/overviews/core/string-interpolation.html

以下是一个快速示例:

在Python中,我曾经做过类似的事情:

print "%(from)s -> %(to)s" % {"from": foo, "to": bar}

现在,在Scala 2.10.0+中,我们可以做到这一点!

val from = "Foo"
val to = 256
println(s"$from -> $to")  // Prints: Foo -> 256

还有一些格式字符串支持,这非常棒:

val from = 10.00  // USD
val to = 984.30  // JPY
println(f"$$$from%.2f -> $to%.2fJPY")  // Prints: $10.00 -> 984.30JPY

由于第二个例子具有一些最小类型表达性,它也为我们提供了一些基本的类型检查!

val from = 10.00
println(f"$$$from%d") // <-- Type error! Found "Double", required "Int"!