E135: Stable Identifier Pattern — 안정적인 식별자가 필요한 패턴
E135: Stable Identifier Pattern — 안정적인 식별자가 필요한 패턴
안정적인 식별자(stable identifier)가 필요한 패턴 매칭 자리에서, 안정적이지 않은 식별자를 사용할 때 발생하는 에러예요.
본문
패턴 매칭에서 안정적인 식별자가 필요한 자리인데 안정적이지 않은 식별자를 사용할 때 발생해요.
Scala 패턴 매칭에서 백틱을 써서 기존 값을 매칭할 때(예: `x`), 참조하는 식별자는 안정적이어야 해요. 안정적 식별자란 값이 바뀌지 않는 식별자예요. val, object, 또는 안정적인 경로 같은 것이죠. 가변 변수(var)는 값이 바뀔 수 있으므로 안정적 식별자가 아니에요.
가변 변수를 패턴에서 사용하면 문제가 돼요. 매칭 대상 값이 매칭 도중이나 이후에 바뀔 수 있어서, 일관되지 않은 동작을 만들 수 있으니까요.
예시
def example(a: Any) =
var x = 1
a match
case `x` => "matched x"
case _ => "other"
에러
-- [E135] Type Error: example.scala:4:9 ----------------------------------------
4 | case `x` => "matched x"
| ^^^
| Stable identifier required, but `x` found
해결 방법
안정적인 식별자가 필요하니 var 대신 val을 쓰면 돼요.
// Use a val instead of a var for the stable identifier
def example(a: Any) =
val x = 1
a match
case `x` => "matched x"
case _ => "other"
안정적 식별자 대신 가드 조건(guard)을 쓰는 방법도 있어요.
// Alternative: Use a guard condition instead of stable identifier
def example(a: Any) =
var x = 1
a match
case y if y == x => "matched x"
case _ => "other"