Вы можете объявить методы как возвращающие this.type
, а затем вернуть this
из них:
trait PageParameter extends Parameterizable{
def page(page: Int) : this.type = { put(("page" -> page.toString)); this }
def pageSize(pageSize: Int): this.type = { put(("pagesize" -> pageSize.toString)); this }
}
На сайте использования вы можете связать вызовы по своему желанию. Смотрите этот пример:
scala> trait Wibble {
| def foo : this.type = { println("foo"); this }
| }
defined trait Wibble
scala> trait Wobble extends Wibble {
| def bar: this.type = { println("bar"); this }
| }
defined trait Wobble
scala> trait Wubble extends Wibble {
| def baz: this.type = { println("baz"); this }
| }
defined trait Wubble
Теперь я могу проверить это
scala> new Wibble with Wobble with Wubble
res0: java.lang.Object with Wibble with Wobble with Wubble = $anon$1@937e20
scala> res0.bar.baz.foo
bar
baz
foo
res1: res0.type = $anon$1@937e20