scala implicit parameter type inference -


running following script under scala 2.10.4. expecting result of a.classop should mypage. why nothing?

scala> trait pagemodel {  | def classop[t](implicit manifest: manifest[t]) {  |  println("class: " + manifest.runtimeclass.getname)  | }  | } defined trait pagemodel  scala> class mypage extends pagemodel defined class mypage  scala> val = new mypage a: mypage = mypage@1f2f992  scala> a.classop class: scala.runtime.nothing$ 

edited:

i think answer. thanks! however, interesting same code running on 2.9.3 gives me java.lang.object. should behave same? see nomanifest in 2.9.3 well.

scala> trait pagemodel{  |  def classop[t](implicit m: manifest[t]) {  |    println("class: " + manifest[t].erasure.getname)  |  }  | } defined trait pagemodel  scala> class mypage extends pagemodel defined class mypage  scala> val = new mypage a: mypage = mypage@f7bf869  scala> a.classop class: java.lang.object 

when define method def classop[t](...) t constrained to? can anything, you're requesting implicit manifest type t can anything: implicit manifest: manifest[t].

if in scala.predef can see following declaration:

val nomanifest = scala.reflect.nomanifest 

where nomanifest is:

object nomanifest extends optmanifest[nothing] 

and optmanifest is:

/** `optmanifest[t]` optional [[scala.reflect.manifest]].  *  either `manifest` or value `nomanifest`. 

so translate to?

since nothing subtype of types , there manifest[nothing] in scope (predef in scope) mean implicit injected when nothing else found.


with said, agree ryan , meant do:

trait pagemodel[t] {  def classop(implicit manifest: manifest[t]) {    println("class: " + manifest.runtimeclass.getname)  } } 

Comments

Popular posts from this blog

ruby on rails - RuntimeError: Circular dependency detected while autoloading constant - ActiveAdmin.register Role -

c++ - OpenMP unpredictable overhead -

javascript - Wordpress slider, not displayed 100% width -