최상위 정의가 기대돼요
최상위 정의가 기대돼요 (E080: Expected Top Level Def)
이 에러는 Scala 3.0.0이 릴리스되기 전에 제거된 에러라, 실제로 스칼라 3 컴파일러가 내보낸 적은 없어요. 초기 Dotty 버전에서 파서가 최상위 정의를 기대했는데 다른 것을 발견했을 때 발생하던 에러예요.
본문
참고: 이 에러는 Scala 3.0.0이 릴리스되기 전에 제거되었고, 스칼라 3 컴파일러가 실제로 내보낸 적은 없어요.
무엇을 하던 에러였을까요 (What it did)
초기 Dotty 버전에서 파서가 최상위 정의를 기대했는데 그 외의 다른 것을 발견하면 이 에러가 발생했어요.
예시 (Example)
// Invalid top-level statement
42
에러 (Error)
-- [E080] Syntax Error: example.scala:1:0 --------------------------------------
1 |42
|^^
|Expected a toplevel definition
설명 (Explanation)
스칼라 소스 파일의 최상위에는 정의만 올 수 있어요.
package선언import문class,trait,object,enum정의type별칭val,var,def정의extension정의given정의export절
42나 println("hello") 같은 독립된 표현식은 최상위(어떤 정의 밖)에서는 유효하지 않아요.
이 에러는 2e5df79218 커밋(2021년 5월)에서 "Refactor remaining statement and declaration loops"의 일부로 제거되었어요. 파서가 최상위의 잘못된 문법에 대해 다른 방식으로 처리하도록 리팩터링되면서 사라졌죠.
최상위에서 코드를 실행하고 싶다면 main 메서드나 객체 안에 감싸면 돼요.
@main def run(): Unit =
println("hello")
// Or
object Main:
def main(args: Array[String]): Unit =
println("hello")