경로(path)가 아니에요
경로(path)가 아니에요 (E083: Not A Path)
안정적인 경로(stable path)가 필요한 자리에서 불변 경로가 아닌 표현식을 쓰면 이 에러가 나요. 싱글턴 타입, 타입 프로젝션, 일부 패턴 매칭 같은 곳에서 경로가 필요해요.
본문
안정적인 경로(stable path)가 필요한 자리에 불변 경로(immutable path)가 아닌 표현식이 들어오면 이 에러가 발생해요.
불변 경로는 다음과 같아요.
- 불변 값(
val)에 대한 참조 this에 대한 참조- 불변 값으로 불변 경로를 선택(selection)한 것
경로는 싱글턴 타입, 타입 프로젝션, 그리고 일부 패턴 매칭 같은 문맥에서 필요해요.
예시 (Example)
var x = 1
def example: x.type = x
x가 var이므로 x.type은 유효한 싱글턴 타입이 아니에요.
에러 (Error)
-- [E083] Type Error: example.scala:2:13 ---------------------------------------
2 |def example: x.type = x
| ^^^^^^
|(x : Int) is not a valid singleton type, since it is not an immutable path
|-----------------------------------------------------------------------------
| Explanation (enabled by `-explain`)
|- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
| An immutable path is
| - a reference to an immutable value, or
| - a reference to `this`, or
| - a selection of an immutable path with an immutable value.
-----------------------------------------------------------------------------
해결 방법 (Solution)
안정적인 경로가 필요하다면 var 대신 val을 써요.
// Use val instead of var for stable paths
val x = 1
def example: x.type = x
또는 가변 값에 싱글턴 타입을 쓰지 않는 방법도 있어요.
// Or don't use singleton types for mutable values
var x = 1
def example: Int = x