2012-03-13 2 views

答えて

12

いいえ、バインドコンテキストは、実際に余分な暗黙のパラメータの省略形ですので。例えば

def sort[A : Ordering](xs: Seq[A]) 

def sort[A](xs: Seq[A])(implicit ordering: Ordering[A]) 

ための短縮形であり、これは型定義で表現できません。

+0

ありがとう:タイプを定義する誰

もバインドコンテキストのための証拠を提供する必要があります。意味あり。 –

12

コンテキストが型宣言に直接バインドされるのではなく、JPPが示す暗黙のパラメータを表す別の値宣言を持つ必要があります。

trait Generic { 
    type U 
    implicit val ordering: Ordering[U] // evidence for U: Ordering 

    def max(u1: U, u2: U) = List(u1, u2).max 
} 

def concrete[T: Ordering] = new Generic { 
    type U = T 
    val ordering = implicitly[Ordering[T]] 
} 

assert(concrete[Int].max(1,3) == 3) 
+2

これが受け入れられる回答である必要があります –

関連する問題