我有一个非常令人费解的问题。我正在玩squeryl
,并在我使用时找到:
package models
import org.squeryl.{Schema, KeyedEntity}
object db extends Schema {
val userTable = table[User]("User")
on(userTable)(b => declare(
b.email is(unique,indexed("idxEmailAddresses"))
))
}
我必须导入import org.squeryl.PrimitiveTypeMode._
但这对我没有意义。此处is
在org.squeryl.dsl.NonNumericalExpression中定义,但为什么我必须包含看似无关的import org.squeryl.PrimitiveTypeMode._
?
谢谢。
答案 0 :(得分:2)
我同意@sschaef这是由于需要隐式转换。当API(如squeryl)决定构建DSL(特定于域的语言)以便获得一种灵活的方式来对其API进行编码时,将需要隐式转换。核心API可能需要某些类型的对象,直接在代码中实例化可能会很麻烦/丑陋。因此,他们将使用隐式转换为您做一些提升并尽可能保持DSL清洁。如果您查看了PrimitiveTypeMode
对象的Scaladoc,您可以看到在其上定义的许多隐式defs。隐式转换(在pimping库中使用)将从一种类型“上转换”到另一种类型,以获得对拉皮条类的更多功能的访问。当代码隐含的东西被明确地包含在最终编译的代码中时。
http://squeryl.org/api/index.html#org.squeryl.PrimitiveTypeMode $
另外,我相信您正在寻找的隐式转换是:
import org.squeryl.PrimitiveTypeMode.string2ScalarString
继承自org.squeryl.dsl.QueryDsl。