최상위 정의는 implicit일 수 없음

최상위 정의는 implicit일 수 없음 (Top Level Cannot Be Implicit)

소스 파일 최상위에 implicit 값이나 메서드를 정의하려 할 때 나오던 에러예요. 지금은 최상위 implicit이 허용되어 이 에러는 비활성화되었어요.

출처: Scala 3 Reference

본문

이 에러는 최상위(top-level) implicit이 이제 허용되면서 Scala 3.0.0에서 비활성화되었어요.

이 에러는 소스 파일의 최상위에 implicit 값이나 메서드를 정의하려 할 때 발생했어요.

예시

package example
implicit val x: Int = 42  // error in old versions

에러 메시지

-- [E061] Syntax Error: example.scala:2:0 --------------------------------------
2 |implicit val x: Int = 42
  |^
  |`implicit` modifier cannot be used for top-level definitions

설명

이전 Scala 3 버전에서는 implicit 정의가 클래스, 객체, 또는 트레이트 안에 있어야 했어요. 이 제한은 사라졌어요.

Scala 3.0.0부터(정확히는 PR #5754 이후) 최상위 implicit이 허용되고 제대로 동작해요.

// This now works in Scala 3
implicit val x: Int = 42

// Or using the modern given syntax
given Int = 42

더 알아보기

  • 지금은 implicit val을 최상위에 그냥 둘 수 있고, 더 현대적인 문법으로는 given Int = 42처럼 쓸 수도 있어요.