使用关键字的Scala

使用关键字的Scala,scala,Scala,我发现了一个简单的例子: 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 wi

我发现了一个简单的例子:

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
}
IdPK的
是什么意思


谢谢。

with
表示该类正在使用Trait via

Post
具有
IdPK
的特性(类似于Java类可以
实现接口)


另请参见

虽然这不是对原始问题的直接回答,但对未来的读者可能有用。发件人:

Scala允许在创建类的新实例时混合使用特征(创建匿名类型)

这意味着带的
在类定义的顶行之外可用。例如:

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
p2
这里有方法
swim
,而
p1
没有。
p2
的真正类型是一种“匿名”类型,即
游泳的人。事实上,
with
语法可用于任何类型的签名:

def swimThemAll(ps: Seq[Person with Swim]): Unit = {
  ps.foreach(_.swim)
}
编辑(2016年10月12日): 我们发现了一个怪癖。无法编译以下内容:

 // each `x` has no swim method
 def swim(xs: Seq[_ >: Person with Swim]): Unit = {
   xs.foreach(_.swim)
 }

这意味着在词汇优先性方面,
with
渴望绑定。这是
\u>:(游泳的人)
,而不是
(\u>:Person)游泳的人

谢谢,我忘了scala中的特征。嘿@Foskers,我正在网上寻找答案,但没有找到答案,在我的搜索中,我在这里结束了-如果我有
Seq[\u>:Person with Swim]
,这是什么意思“任何超类型的
游泳的人
”或“任何超类型的
游泳的人
,混合了
游泳的人”?老实说,这两种方法都没有太多意义,我从来没有必要使用它,但我在其他代码中发现了它。