Почему люди определяют объект расширяет свой класс-компаньон? - PullRequest
8 голосов
/ 14 февраля 2011

Я считаю, что этот тип кода очень распространен в среде Lift, написанной так:
object BindHelpers extends BindHelpers {} Что это значит?

Ответы [ 4 ]

6 голосов
/ 14 февраля 2011

В этом случае BindHelpers - это черта, а не класс. Пусть foo() будет методом, определенным в BindHelpers, для доступа к нему вы можете либо.

  1. Используйте его через сопутствующий объект: BindHelpers.foo()

  2. Смешайте черту BindHelpers в классе и, таким образом, получите доступ к методам внутри него.

Например:

class MyClass extends MyParentClass with BindHelpers {
  val a = foo()
}

Те же приемы используются, например, в Scalatest для ShouldMatchers.

3 голосов
/ 15 февраля 2011

Вы можете найти ответ Дэвида Поллака на тот же вопрос в группе лифтовой паутины.

2 голосов
/ 14 февраля 2011

Может быть, здесь иная картина. Я не знаю, Лифт, чтобы ответить на этот вопрос, но есть проблема с object в том, что они не насмехаются. Таким образом, если вы определяете все в class, которое можно смоделировать, а затем просто заставляет объект расширять его, вы можете смоделировать класс и использовать его вместо объекта внутри ваших тестов.

2 голосов
/ 14 февраля 2011

Интересно для object расширить свой класс-компаньон, потому что он будет иметь тот же тип, что и класс.

Если object BindHelpers не расширяет BindHelpers, он будет иметь тип BindHelpers$.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...