E214: Illegal Context Bounds
E214: Illegal Context Bounds
이 에러는 컨텍스트 바운드(context bound)가 허용되지 않는 위치에 사용되었을 때 발생해요.
본문
컨텍스트 바운드(예: T: Ordering)는 타입 파라미터에 대해 타입 클래스의 암시적 인스턴스를 요구하는 축약 표기예요. 하지만 컨텍스트 바운드는 메서드나 클래스 타입 파라미터 같은 특정 위치에서만 사용할 수 있고, 타입 별칭 정의에서는 사용할 수 없어요.
예시 (Example)
trait Equatable[T]
type Foo[T: Equatable]
에러 (Error)
-- [E214] Syntax Error: example.scala:3:21 -------------------------------------
3 |type Foo[T: Equatable]
| ^^^^^^^^^
| Context bounds are not allowed in this position
해결 방법 (Solution)
컨텍스트 바운드는 암시적 파라미터를 추가할 수 있는 메서드나 클래스 정의에서 허용돼요.
trait Equatable[T]
def foo[T: Equatable](value: T): Unit = ()
trait Equatable[T]
class Foo[T: Equatable](value: T)
타입 별칭에서는 컨텍스트 바운드를 사용할 수 없어요. 제약을 표현할 필요가 있다면 클래스나 트레이트를 사용하는 것을 고려해 봐요.
trait Equatable[T]
trait Foo[T]:
given Equatable[T] = ???