Подтвердить что ты не робот

Ограничение черты объектами?

Есть ли способ ограничить признак, чтобы его можно было смешивать только с объектами? Например.

trait OnlyForObjects {
  this: ... =>
}

object Foo extends OnlyForObjects  // --> OK

class Bar extends OnlyForObjects   // --> compile error
4b9b3361

Ответ 1

Да! Там скрытый и в основном недокументированный scala.Singleton:

scala> trait OnlyForObjects { this: Singleton => }
defined trait OnlyForObjects

scala> object Foo extends OnlyForObjects
defined module Foo

scala> class Bar extends OnlyForObjects
<console>:15: error: illegal inheritance;
 self-type Bar does not conform to OnlyForObjects selftype OnlyForObjects
 with Singleton
       class Bar extends OnlyForObjects
                         ^

Он упоминал несколько раз в спецификации языка, но даже не отображается в документации API.