E207: Illegal Unroll Placement

E207: Illegal Unroll Placement

이 에러는 @unroll 애노테이션을 잘못된 위치에 사용했을 때 발생해요. @unroll은 기본값이 있는 메서드 파라미터에만 적용할 수 있는 실험적 기능이에요.

출처: Scala 3 Reference

본문

@unroll 애노테이션은 기본값이 있는 새 파라미터를 추가할 때 바이너리 호환성을 유지하기 위해 메서드의 오버로드 버전 여러 개를 생성하는 데 사용돼요.

예시 (Example)

import scala.annotation.unroll

@unroll
class UnrollClass

에러 (Error)

-- [E207] Declaration Error: example.scala:4:6 ---------------------------------
4 |class UnrollClass
  |      ^
  |      @unroll is only allowed on a method parameter

해결 방법 (Solution)

@unroll 애노테이션은 기본값이 있는 메서드 또는 생성자 파라미터에만 사용해요.

import scala.annotation.unroll
import scala.annotation.experimental

@experimental
final class Unrolled(s: String, n: Int = 1, @unroll b: Boolean = true):
  def foo = s + n + b

@unroll에는 추가 제약이 있다는 점을 기억해 두세요.

  • 메서드는 실질적으로 final(오버라이드 불가)이어야 함
  • 메서드는 지역(local)일 수 없음
  • 케이스 클래스의 경우 애노테이션은 생성된 메서드가 아니라 클래스 생성자에 붙여야 함

이 기능은 실험적이며 -experimental 컴파일러 플래그가 필요해요.