Как объявить универсальную переменную в Scala без ее инициализации (или инициализации любым значением)?

def foo[T] {
   var t: T = ???? // tried _, null
   t
}
12
IttayD 20 Окт 2009 в 00:08

2 ответа

Лучший ответ
def foo[T] {
   var t: T = null.asInstanceOf[T]
   t
}

И, если вам не нравится церемония, связанная с этим, вы можете облегчить это следующим образом:

  // Import this into your scope
  case class Init()
  implicit def initToT[T](i: Init): T = {
    null.asInstanceOf[T]
  }

  // Then use it
  def foo[T] {
    var t: T = Init()
    t
  }
16
Mitch Blevins 20 Окт 2009 в 01:38

Вы не можете не инициализировать локальные переменные, но можете сделать это для полей:

scala> class foo[T] {
     | var t: T = _
     | }
defined class foo
8
Daniel C. Sobral 20 Окт 2009 в 01:07
2
Знаете ли вы, почему это разрешено для переменных класса, но не для переменных метода?
 – 
IttayD
20 Окт 2009 в 08:41