0
我非常深刻的印象的Scala代码这样的编译时的安全性:Play框架的SQL运算符的编译时魔法是如何工作的?
val searchCountryPrefix:String = ....
val sql = SQL"""
select
cn.name, cn.indepyear, c.name
from
city c
join country cn on c.id = cn.capital
where
cn.name like $searchCountryPrefix
"""
...因为如果我在字符串中一个错字,并如使用错误的东西:
...
where
cn.name like $searchCountyPrefix -- instead of country, it says county
"""
...然后Scala编译器捕获它并报告它。
我从来没有在除Lisp以外的其他语言中看到过这样的编译时魔法 - Play框架如何做到这一点?
更重要的是,我可以在自己的库中做这样的魔术编译时字符串检查吗?
在此先感谢您的帮助。
谢谢,这正是我所希望的!你能指出相关的代码吗?我想看看SQL内插器如何工作,以便我可以构建自己的内插器。 – ttsiodras 2014-12-01 17:15:34
@ttsiodras你可以在这里找到Anorm代码:https://github.com/playframework/playframework/blob/2.3.6/framework/src/anorm/src/main/scala/anorm/package.scala#L48否则SIP已经很好地描述了如何编写自己的插值。 – vptheron 2014-12-01 17:27:10
真棒,谢谢!我已经想到了这个Scala特性的许多用途。 – ttsiodras 2014-12-01 17:33:30