최상위 정의는 implicit일 수 없음
최상위 정의는 implicit일 수 없음 (Top Level Cannot Be Implicit)
소스 파일 최상위에 implicit 값이나 메서드를 정의하려 할 때 나오던 에러예요. 지금은 최상위 implicit이 허용되어 이 에러는 비활성화되었어요.
본문
이 에러는 최상위(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처럼 쓸 수도 있어요.