E212: Only Fully Dependent Applied Constructor Type

E212: Only Fully Dependent Applied Constructor Type

이 경고는 첫 번째 파라미터 목록의 모든 파라미터가 tracked로 표시되지 않은 클래스에 적용된 생성자 타입(applied constructor type, 즉 생성자 인자를 포함하는 타입)을 사용할 때 발생해요.

출처: Scala 3 Reference

본문

적용된 생성자 타입은 생성자 인자를 타입 자체에 포함시켜 더 정밀한 타입을 표현할 수 있게 해 주는 실험적 기능이에요. 하지만 이 기능은 첫 번째 파라미터 목록의 모든 파라미터가 tracked일 때, 즉 그 값들이 타입의 일부가 될 때만 제대로 동작해요.

예시 (Example)

import scala.language.experimental.modularity

class MyBox(val value: Int)

def example =
  val box: MyBox(42) = MyBox(42)
  box

에러 (Error)

-- [E212] Type Warning: example.scala:6:11 -------------------------------------
6 |  val box: MyBox(42) = MyBox(42)
  |           ^^^^^^^^^
  |Applied constructor type can only be used with classes where all parameters in the first parameter list are tracked

해결 방법 (Solution)

적용된 생성자 타입을 쓸 수 있도록 클래스 파라미터를 tracked로 표시해요.

import scala.language.experimental.modularity

class MyBox(tracked val value: Int)

def example =
  val box: MyBox(42) = MyBox(42)
  box

대안으로, 정밀한 타입 추적이 필요 없다면 적용된 생성자 타입 문법을 제거해요.

import scala.language.experimental.modularity

class MyBox(val value: Int)

def example =
  val box: MyBox = MyBox(42)
  box