Scala---Import子句详解

语法:
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)}

更多精彩内容请关注:http://bbs.superwu.cn

关注超人学院微信二维码:

时间: 2024-11-11 19:13:12

Scala---Import子句详解的相关文章

RequireJS-CommonJS-AMD-ES6 Import/Export详解

RequireJS-CommonJS-AMD-ES6 Import/Export详解 为什么起了一个这个抽象的名字呢,一下子提了四个名词分别是:RequireJS,CommonJS,AMD,ES6,答案是因为现实很骨感,我们必须很勇敢才能正视这一段悲催的往事.如今的JavaScript平台正值如日中天,大家可能会忽略他的过去和弊端,这些弊端中一直被人诟病的就是JavaScript的包管理,比如类似Java中的import,其实理论上来讲这种基本元素的缺失大大的阻碍了人们对一种语言的认可,认为他难

Scala隐含参数详解

隐含参数隐含参数列表(implicit p1,...,pn)将参数p1,...,pn标记为隐含的.一个方法或构造器仅能有一个隐含参数列表,且必须是给出的参数列表的最后一个.具有隐含参数列表的方法可以像正常方法一样应用到参量上.这种情况下implicit标识符没有作用.然而如果该方法没有隐含参数列表中的参量,对应的参量会自动提供.有两种情况实体参量可以传递给类型为T隐含参数.首先,所有的标识符x可以在方法被调用的地方无需前缀就可以访问到,且该标识符表示一个隐含定义(§7.1)或隐含参数.一个可用的

scala 隐式详解(implicit关键字)

掌握implicit的用法是阅读Spark源码的基础,也是学习Scala其它的开源框架的关键,implicit 可分为: 隐式参数 隐式转换类型 隐式调用函数 1.隐式参数 当我们在定义方法时,可以把最后一个参数列表标记为implicit,表示该组参数是隐式参数.一个方法只会有一个隐式参数列表,置于方法的最后一个参数列表.如果方法有多个隐式参数,只需一个implicit修饰即可. 当调用包含隐式参数的方法是,如果当前上下文中有合适的隐式值,则编译器会自动为改组参数填充合适的值.如果没有编译器会抛

Scala笔记整理(三):Scala面向对象—类详解1

[TOC] getter和setter 简单类和无参方法 需要说明的是,官方给出的参考资料对于这方面讲解得十分详细,目前入门来说,不需要达到这样的理解,只需要可以进行开发即可,这一部分我给出的是官方的一些文档说明,但是后面的定制和注解,就直接简单说明能用就好了. class PersonOps { private var age = 0 //你必须初始化一个字段 def increment() {age += 1} //方法默认是公有的 def currentAge() = age } 1)在S

Scala集合类型详解

Scala集合 Scala提供了一套很好的集合实现,提供了一些集合类型的抽象. Scala 集合分为可变的和不可变的集合. 可变集合可以在适当的地方被更新或扩展.这意味着你可以修改,添加,移除一个集合的元素.而不可变集合类永远不会改变.不过,你仍然可以模拟添加,移除或更新操作.但是这些操作将在每一种情况下都返回一个新的集合,同时使原来的集合不发生改变. 集合中基本结构: 几种常用集合类型示例: // 定义整型 List   val x = List(1, 2, 3, 4)     // 定义 S

关于scala环境配置详解

首先从官网下载适合自身电脑配置的scala安装包.scala下载官网网址:http://www.scala-lang.org/download/ 同时scala还有自己集成好的IDE,例如eclipse, IDEA. http://scala-ide.org/download/sdk.html 按照系统默认,安装scala,安装路径可以自行设置.安装好scala后,系统会自动提示,单击finish,完成安装. 按照系统默认,安装scala,安装路径可以自行设置.安装好scala后,系统会自动提示

Scala根类详解

根类图12展示了Scala类的层次结构.层次结构的根是类Any.Scala执行环境中的每个类都直接或间接地继承自该类.类Any有两个直接子类:AnyRef和AnyVal.子类AnyRef表示在宿主系统中表示为一个对象的所有值.所有用户定义的Scala类都直接或间接的继承自该类.更进一步,所有用户定义的Scala类也都继承自特征scala.ScalaObject.由其他语言编写的类也都继承自scala.AnyRef,但是并没有继承scala.ScalaObject. 图12.1 Scala类层次结

SQL Where 子句详解

WHERE 子句用于规定选择的标准. WHERE 子句 如需有条件地从表中选取数据,可将 WHERE 子句添加到 SELECT 语句. 语法 SELECT 列名称 FROM 表名称 WHERE 列 运算符 值 下面的运算符可在 WHERE 子句中使用: 操作符 描述 = 等于 <> 不等于 > 大于 < 小于 >= 大于等于 <= 小于等于 BETWEEN 在某个范围内 LIKE 搜索某种模式 注释:在某些版本的 SQL 中,操作符 <> 可以写为 !=.

SQL Having 子句详解

HAVING 子句 在 SQL 中增加 HAVING 子句原因是,WHERE 关键字无法与合计函数一起使用. SQL HAVING 语法 SELECT column_name, aggregate_function(column_name) FROM table_name WHERE column_name operator value GROUP BY column_name HAVING aggregate_function(column_name) operator value SQL H