使用关键字的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]
,这是什么意思“任何超类型的游泳的人
”或“任何超类型的游泳的人
,混合了游泳的人”?老实说,这两种方法都没有太多意义,我从来没有必要使用它,但我在其他代码中发现了它。