Ответ Роберта охватывает технические подробности границ контекста. Я дам вам свое толкование их значения.
В Scala View Bound (A <% B
) фиксирует концепцию «можно увидеть как» (тогда как верхняя граница <:
фиксирует концепцию «является»). Ограниченная контекстом (A : C
) говорит «имеет» о типе. Вы можете прочитать примеры о манифестах как "T
имеет Manifest
". Пример, на который вы ссылаетесь примерно на Ordered
против Ordering
, иллюстрирует разницу. Метод
def example[T <% Ordered[T]](param: T)
говорит, что параметр можно рассматривать как Ordered
. Сравните с
def example[T : Ordering](param: T)
, который говорит, что с параметром связан Ordering
.
С точки зрения использования, для создания соглашений потребовалось некоторое время, но границы контекста предпочтительнее границ представления ( границы представления теперь устарели ). Одно из предположений заключается в том, что привязка к контексту предпочтительна, когда вам нужно перенести неявное определение из одной области в другую, не обращаясь к нему напрямую (это, безусловно, относится к ClassManifest
, используемому для создания массива).
Еще один способ рассмотрения границ представления и границ контекста состоит в том, что первый переносит неявные преобразования из области видимости вызывающего. Вторая передает неявные объекты из области видимости вызывающего.