Введите псевдонимы для внешнего объекта в качестве параметра частной области - PullRequest
4 голосов
/ 23 ноября 2011

У меня такая ситуация

object SuperHorribleLongName {
   trait X {
       private[SuperHorribleLongName] def internalGaga() : Unit
   }
}

и я пытаюсь заставить что-то вроде этого работать:

object SuperHorribleLongName {
   private type Sup = SuperHorribleLongName.type
   trait X {
       private[Sup] def internalGaga() : Unit
   }
}

но это только дает мне "error: Sup is not an enclosing class" ... Я также пытался type Sup = this.type, но все равно это не работает.

В любом случае, чтобы получить хороший ярлык для моего внешнего объекта при использовании в качестве параметра частной области видимости? Я делаю хочу сохранить длинное имя для объекта, и у меня есть много частных методов, поэтому он действительно мешает мне.

1 Ответ

0 голосов
/ 30 ноября 2011

Я знаю, что это подходит вашей иерархии, но как насчет размещения всех ваших личных методов в

private trait Y {

В противном случае вы всегда можете имитировать пространство имен:

object SuperHorribleLongName {
object SHLN { //Dummy alias
  trait X {
     private[SHLN] def internalGaga() : Unit
  }
}
type X = SHLN.X  //Lift into main object
}

Это не удовлетворяет, так как SHLN виден, и поворот его private предотвращает подъем X. И это грязно.
Итак, давайте перевернем проблему внутрь / наружу:

private object SHLN {
   trait X {
     private[SHLN] def internalGaga() : Unit
  }
}

//Expose the instance under wanted name
val SuperHorribleLongName = SHLN
...