我找到了简单的例子:
class Post extends LongKeyedMapper[Post] with IdPK {
def getSingleton = Post
object title extends MappedText(this)
object text extends MappedText(this)
object date extends MappedDate(this)
}
object Post extends Post with LongKeyedMetaMapper[Post] {
def getPosts(startAt: Int, count: Int) = {
Post.findAll(OrderBy(Post.date, Descending), StartAt(startAt), MaxRows(count))
}
def getPostsCount = Post.count
}
Run Code Online (Sandbox Code Playgroud)
这是什么意思with IdPK?
谢谢.
Col*_*ury 14
虽然这不是原始问题的直接答案,但它可能对未来的读者有用.来自维基百科:
Scala允许在创建类的新实例时混合特征(创建匿名类型).
这意味着它with可以在类定义的顶行之外使用.例:
trait Swim {
def swim = println("Swimming!")
}
class Person
val p1 = new Person // A Person who can't swim
val p2 = new Person with Swim // A Person who can swim
Run Code Online (Sandbox Code Playgroud)
p2这里有swim可用的方法,而p1没有.在真正的类型p2是"匿名"之一,即Person with Swim.实际上,with语法可以用在任何类型的签名中:
def swimThemAll(ps: Seq[Person with Swim]): Unit = {
ps.foreach(_.swim)
}
Run Code Online (Sandbox Code Playgroud)
编辑(2016年10月12日): 我们发现了一个怪癖.以下内容无法编译:
// each `x` has no swim method
def swim(xs: Seq[_ >: Person with Swim]): Unit = {
xs.foreach(_.swim)
}
Run Code Online (Sandbox Code Playgroud)
意味着在词汇优先方面,with急切地束缚.这_ >: (Person with Swim),不是(_ >: Person) with Swim.
| 归档时间: |
|
| 查看次数: |
32419 次 |
| 最近记录: |