语法:
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
关注超人学院微信二维码:微信