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
Post a Comment