임포트
임포트 (Imports)
와일드카드(wildcard)와 이름 바꾸기(renaming) 임포트(그리고 export)의 문법이 바뀌었어요.
본문
와일드카드 임포트
와일드카드 임포트는 이제 밑줄(_) 대신 *로 표현해요. 예를 들어볼게요.
import scala.annotation.* // imports everything in the annotation package
만약 *라는 이름의 멤버를 정확히 임포트하고 싶다면, 백틱으로 감싸면 돼요.
object A:
def * = ...
def min = ...
object B:
import A.`*` // imports just `*`
object C:
import A.* // imports everything in A
이름 바꾸기 임포트
임포트에서 이름을 바꾸거나 제외할 때는 이제 => 대신 as를 사용해요. 하나짜리 이름 바꾸기 임포트도 더 이상 중괄호로 감쌀 필요가 없어요. 예시를 보여드릴게요.
import A.{min as minimum, `*` as multiply}
import Predef.{augmentString as _, *} // imports everything except augmentString
import scala.annotation as ann
import java as j
마이그레이션
크로스 빌딩을 지원하기 위해 Scala 3.0은 와일드카드에 _, 이름 바꾸기에 =>를 쓰는 옛 임포트 문법도 새 문법과 함께 지원해요. 옛 문법은 향후 버전에서 제거될 예정이에요. 옛 문법에서 새 문법으로의 자동 재작성은 -source 3.1-migration -rewrite 설정 아래에서 제공돼요.
문법
Import ::= ‘import’ ImportExpr {‘,’ ImportExpr}
ImportExpr ::= SimpleRef {‘.’ id} ‘.’ ImportSpec
| SimpleRef `as` id
ImportSpec ::= NamedSelector
| WildcardSelector
| ‘{’ ImportSelectors) ‘}’
NamedSelector ::= id [‘as’ (id | ‘_’)]
WildCardSelector ::= ‘*' | ‘given’ [InfixType]
ImportSelectors ::= NamedSelector [‘,’ ImportSelectors]
| WildCardSelector {‘,’ WildCardSelector}