2016-04-18 11 views
3

私はシンプルな型のクラスパターンを実装しようとしています。スカラズのタイプメスと同様に動作すると考えられます。残念ながら私はそれを働かせることはできません。私は、形質Strスカラ型式

trait Str[T] { 
    def str(t: T): String 
} 

object Str { 
    def apply[T](implicit instance: Str[T]) : Str[T] = instance 
} 

そして、それを私と暗黙のインスタンスであります。

object Temp extends App { 

    implicit val intStr = new Str[Int] { 
    def str(i: Int) = i.toString 
    } 

    1.str //error: value str is not a member of Int 

} 

私は洞察に感謝します。あなたが今できること

+0

それはstrが(1).str' 'すべきではありませんか?あなたは '暗黙のクラス'を定義しておらず、 'オブジェクト'と 'apply'だけを定義していました。 –

答えて

8

すべてはあなたが暗黙の型変換を導入する必要が1.strを使用する

Str[Int].str(1) 

です。

あなたは、たとえば、このアプローチを使用することができます

implicit class StrOps[A](val self: A) extends AnyVal { 
    def str(implicit S: Str[A]) = S.str(self) 
} 

います:

scala> 1.str 
res2: String = 1