語法:
Import ::= „import‟ ImportExpr {„,‟ ImportExpr}
ImportExpr ::= StableId „.‟ (id | „_‟ | ImportSelectors)
ImportSelectors ::= „{‟ { ImportSelector „,‟} (ImportSelector | „_‟) „}‟
ImportSelector ::= id [„=>‟ id | „=>‟ „_‟]
import子句形式爲import p.I,p是一個穩定標識符(§3.1),I是一個import表達式。import表達式肯定了p的成員中一些名稱的集合,使這些名稱不加限定便可用。最普通的import表達式的形式是一個import選擇器的列表。
{x1=>y1,…,xn=>yn,_}
其中n>=0,最後的通配符„_‟能夠沒有。它使每一個成員p.xi在未限定的名稱yi下可用。例如每一個import 選擇器 xi=>yi將p.xi重命名爲yi。若是存在最終的通配符,p的除x1,…,xn以外的成員z也將在其自身未限定的名稱下可用。
import 選擇器對類型和術語成員起一樣做用。例如,import子句import p.{x=>y}將術語p.x重命名爲術語y,而且將類型名p.x重命名爲類型名y。這兩個名稱中至少有一個引用p的一個成員。
若是import 選擇器的目標是通配符,import 選擇器就會隱藏對源成員的訪問。例如,import 選擇器 x=>_將x「重命名」爲通配符號(做爲用戶程序中的名稱不可訪問),所以也有效阻止了對x的非限制性的訪問。這在同一個import 選擇器列表最後有一個通配符的狀況下是有用的,此時將引入全部前面import 選擇器沒有說起的成員。
由import子句所引入的綁定的域開始於import子句以後並擴展至封閉塊,模板,包子句,或編譯單元的末尾,具體決定於哪一個先出現。
存在一些簡化形式。import 選擇器能夠只是一個名字x。這種狀況下,x以沒有重命名的方式被引入,所以該import 選擇器等價於x=>x。更進一步,也能夠用一個標識符或通配符來替換整個的import 選擇器列表。import子句import p.x等價於import p.{x},例如不用限定p的成員x便可用。import子句p._等價於import p.{_},例如不用限定p的全部成員x便可用(該處是java中import p.*的同義語)。
一個import子句中的多個import表達式import p1.I1,…,pn.In被解釋爲一個import子句的序列import p1.I1;…;import pn.In。
示例4.7.1考慮如下對象定義:
object M{
def z = 0, one = 1
def add(x: Int, y: Int):Int = x + y
}
所以代碼塊
{import M.{one, z => zero, _}; add(zero, one)}
就等價於代碼塊
{M.add(M.z, M.one)}java
更多精彩內容請關注:http://bbs.superwu.cn web
關注超人學院微信二維碼:微信