E218: Illegal Erased Definition — erased는 값(val)에만 허용돼요
E218: Illegal Erased Definition — erased는 값(val)에만 허용돼요
erased 수식어를 지원하지 않는 정의에 붙이면 이 에러가 발생해요. erased로 표시할 수 있는 건 딱 한 가지 — 지연되지 않은(lazy가 아닌) 불변 값 val뿐입니다. 나머지 정의 종류에는 erased를 쓸 수 없어요.
추가로, 어떤 값의 타입이 (예를 들어 compiletime.Erased를 상속해서) 암시적으로 erased가 되는 경우에도, 그 정의 종류가 지우기(erasure)를 지원하지 않으면 같은 에러가 나올 수 있어요.
본문
Example
import scala.language.experimental.erasedDefinitions
object Test:
erased lazy val x: Int = 42
lazy val에는 erased를 붙일 수 없어요.
Error
-- [E218] Type Error: example.scala:4:18 ---------------------------------------
4 | erased lazy val x: Int = 42
| ^
| `erased` is not allowed for this kind of definition.
|-----------------------------------------------------------------------------
| Explanation (enabled by `-explain`)
|- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
| Only non-lazy immutable values can be `erased`
-----------------------------------------------------------------------------
Solution
erased는 반드시 lazy가 아닌 val 정의에만 사용해야 해요.
import scala.language.experimental.erasedDefinitions
object Test:
erased val x: Int = 42
만약 erased 파라미터를 가진 메서드가 필요하다면, 대신 erased 파라미터를 쓰면 됩니다.
import scala.language.experimental.erasedDefinitions
def compute(erased hint: Int): Int = 42