scala - keywords - planificador de palabras clave google gratis
Scala con el uso de palabras clave (2)
Encontré un ejemplo simple:
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
}
¿Qué significa with IdPK
?
Gracias.
Si bien esta no es una respuesta directa a la pregunta original, puede ser útil para futuros lectores. De la Wikipedia :
Scala permite mezclar un rasgo (crear un tipo anónimo) al crear una nueva instancia de una clase.
Esto significa que with
es utilizable fuera de la línea superior de una definición de clase. Ejemplo:
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
aquí tiene el método swim
disponible, mientras que p1
no. El tipo real de p2
es "anónimo", es decir, Person with Swim
. De hecho, with
sintaxis se puede utilizar en cualquier tipo de firma:
def swimThemAll(ps: Seq[Person with Swim]): Unit = {
ps.foreach(_.swim)
}
EDITAR (12 de octubre de 2016): hemos descubierto una peculiaridad. Lo siguiente no compilará:
// each `x` has no swim method
def swim(xs: Seq[_ >: Person with Swim]): Unit = {
xs.foreach(_.swim)
}
Lo que significa que en términos de precedencia léxica, se une with
entusiasmo. Es _ >: (Person with Swim)
, no (_ >: Person) with Swim
.
with
significa que la clase está utilizando un Rasgo a través de mixin .
Post
tiene el IdPK
rasgo (similar a una clase Java que puede implements
una interfaz).
Ver también A Tour of Scala: Mixin Class Composition.