В следующем коде (упомянутом в другом ответе, но приводит к отдельному вопросу) так называемый параметр доказательства используется, чтобы указать компилятору, что параметр A имеет строковый тип через привязку контекста.
case class Foo[A](a:A) { // 'A' can be substituted with any type
// type constraint ensures type A
def getStringLength(implicit evidence: A =:= String) = a.length
}
Но почему бы просто не определить класс вообще без параметра типа? Я имею в виду, что если вы параметризуете используемый тип, то вам нужен общий класс; в противном случае, почему бы просто не опустить параметр типа, как показано ниже?
case class Foo(a: String) {
def getStringLength(implicit evidence: A) = a.length
}
Каков пример, когда контекстная привязка дает преимущество?