views:

239

answers:

2

How do I declare a generic variable in Scala without initializing it (or initializing to any value)?

def foo[T] {
   var t: T = ???? // tried _, null
   t
}
+5  A: 

You can't not initialize local variables, but you can do so for fields:

scala> class foo[T] {
     | var t: T = _
     | }
defined class foo
Daniel
do you know why it is allowed for class variables but not method variables?
IttayD
No, I do not know.
Daniel
+2  A: 
def foo[T] {
   var t: T = null.asInstanceOf[T]
   t
}

And, if you don't like the ceremony involved in that, you can ease it this way:

  // 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
  }
Mitch Blevins