3

我想出了一个在 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;或放在大括号中,如{"&"}. 我会因为最丑的代码而获奖吗?:-)

4

3 回答 3

2

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

于 2011-04-28T19:22:10.557 回答
2

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

于 2011-04-29T00:49:48.143 回答
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"!
于 2013-08-01T08:30:52.237 回答