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