2

Scala REPL とその bind メソッドをいじっています。残念ながら、型の一部の型情報を消去する ClassTag が必要List[Int]ですList[_]。したがって、HList を REPL ラッパーに渡し、バインド メソッドに渡すことができる文字列として型を取得したいと考えています。このために、HList を文字列のリストにマップする必要があります。

def extract extends (Tuple2[String, T] ~>> String) {
    def apply[T](value: Tuple2[String, T]) = typeOf[T].toString
}

上記のコードは機能しません。1 つには、Tuple2 を使用できません。それを解決するのはそれほど難しくないはずです。ただし、typeOf[T] には暗黙の TypeTag が必要です。どうすればこれを行うことができますか?助けてもらえshowますか?

助けてくれてありがとう。

4

1 に答える 1

1

このようなことを試してみてください。

scala> :paste
// Entering paste mode (ctrl-D to finish)

import scala.reflect.runtime.universe._
import shapeless._, poly._

object extract extends Poly1 {
  implicit def caseT[T: TypeTag] = at[(String, T)](_ => typeOf[T].toString)
}

// Exiting paste mode, now interpreting.

import scala.reflect.runtime.universe._
import shapeless._
import poly._
defined object extract

scala> val l = ("foo", 23) :: ("bar", true) :: ("baz", 2.0) :: HNil
l: ... = (foo,23) :: (bar,true) :: (baz,2.0) :: HNil

scala> l map extract
res0: String :: String :: String :: HNil = Int :: Boolean :: Double :: HNil
于 2014-06-24T20:07:32.113 に答える