【发布时间】:2011-08-16 15:02:10
【问题描述】:
此问题与 (Why is there no string interpolation in Scala?) 有关,但更具体地处理多行字符串。
我刚刚接受了 Martin 关于简单字符串占位符的建议 msg = "你好 {name}!"
在今天的 Scala 中可以像这样表示,没有太大区别: msg = "你好"+名字+"!"
但是,我认为这种方法不适用于多行字符串。而且,在某些情况下,它可能会鼓励其他有利于可读性的不良做法。请注意,在 Scala Play ANORM 数据库映射中,框架如何尝试在普通 SQL 中保留可读性(使用占位符),但以复制 {countryCode} 变量名称和以非类型安全的方式为代价,请参阅... .on("countryCode" -> "FRA")
SQL(
"""
select * from Country c
join CountryLanguage l on l.CountryCode = c.Code
where c.code = {countryCode};
"""
).on("countryCode" -> "FRA")
另外,假设 Scala 没有改变来解决这个问题,那么使用内联 XML 会有什么影响?性能,内存等如何:
val countryCode = "FRA"
SQL(<c>
select * from Country c
join CountryLanguage l on l.CountryCode = c.Code
where c.code = {countryCode};
</c>.text)
【问题讨论】:
-
文字 XML hack 的一个缺点是它只被评估一次。另请注意,增强的字符串编译器插件看起来很有希望,但维护存在问题:github.com/jrudolph/scala-enhanced-strings
标签: scala playframework multilinestring anorm