`
wbj0110
  • 浏览: 1611311 次
  • 性别: Icon_minigender_1
  • 来自: 上海
文章分类
社区版块
存档分类
最新评论

Scala学——包和引入

阅读更多

使用包的目的:管理大型程序中的名称。

包可以嵌套。同一个包可以定义在多个文件当中,也不需要将源文件的目录和包之间对应起来。

java.lang、scala和Predef包总是被引入的。

作用域规则

可访问上层作用域中的名称。

在Scala中包名是相对的。而在Java中包名是绝对的,是从包层级的最顶端开始的。相对的包名可能会带来问题。

在上面的情况下,由于编译器会尝试从com.horstmann.collection中查找mutable,但实际是找不到的,会使得编译Manager类无法通过。

解决方式之一,是使用绝对包名——以_root_开始:

另一种方法是使用“串联式包语句”。

串联式包语句

 

使用了串联式包语句,由于包的上级层次不可见了,所以也就没有了上面提到的问题了。

文件顶部标记

如果文件中的所有代码都属于同一个包,在文件顶部标记包是更好的做法。

文件的内容都在com.horstmann.impatient.people包内,但com.horstmann.impatient包内的内容对于这个文件来说是可见的(com和com.horstmann是不可见的)。

包对象

包可以包含类、对象和特质,但不能包含函数或变量的定义,这是JVM的局限。将工具函数或常量添加到包,而不是某个Utils对象,更为合理。(这也是初学时觉得Scala的包引入有些奇怪的原因了。)包对象就是为了解决这个局限。

每个包可以有一个包对象,需要在父包中定义,名称与子包一样。

在编译实现时,包对象被编译成带有静态方法和字段的JVM类,名为package.class,位于相应的包下。

对源文件使用相同的命名规则是好习惯。将包对象放在com/horstmann/impatient/people/package.scala中,会方便其他人找到。

包可见性

Java内,没有修饰符的类成员默认是包内可见的;而Scala则是“公共可见”的。如果要想让成员在某个包内可见,可以使用类似于对象私有字段的语法来指定: private[package-name]

 

引入

 

import语句可以出现在任何地方,而不是只能在文件顶部。import的效果从开始延伸到语句块的结束。这可以大幅减少名称冲突的可能性。

重命名和隐藏成员

如果想要引入包中的几个成员,可以使用selector(选取器):

 

隐式引入

如上所说,Scala总会引入 java.lang._ 、 scala._ 和 Predef._
java.lang总会被引入,然后引入scala包,scala包将会覆盖java.lang中的内容,最后引入Predef包。这里也能解释,为什么以scala开头的包,在使用时都是省去scala.的。

http://nerd-is.in/2013-08/scala-learning-packages-and-imports/

分享到:
评论

相关推荐

    scala-2.12.10.zip

    这个"scala-2.12.10.zip"文件是Scala编程语言的特定版本——2.12.10,专为Windows操作系统设计的安装包。Scala 2.12.x系列是该语言的一个稳定版本,它提供了许多新特性和改进,旨在提高开发人员的效率和代码的可维护...

    快学scala(内容高清原版带目录)

    "快学Scala(黑马老师推荐)"这个压缩包很可能是由知名的教育机构——黑马程序员提供的Scala学习资料,包含了高清的课程内容,旨在帮助学习者快速掌握这门语言。 在Scala中,类和对象是核心概念。类用于定义对象的...

    scala-2.11 环境,免安装版,配置环境变量即可使用

    在压缩包文件列表中,有两个不同的Scala版本——2.11.12和2.11.8。这两个版本之间的差异主要在于bug修复、性能提升和新功能的添加。例如,2.11.12是较新的版本,可能包含自2.11.8以来的更多改进。用户可以根据自己的...

    Scala编程完整版.rar

    "Scala编程完整版.rar"这个压缩包包含了一份详细的Scala学习资料——"Scala编程完整版.pdf",对于想要深入理解和掌握Scala的人来说,这是一个宝贵的资源。 在Scala中,类和对象是核心概念。类定义了对象的状态和...

    在浏览器上运行 Scala Scala.js.zip

    总之,Scala.js是一个极具创新性的技术,它打破了传统前端开发的边界,让开发者有机会用一种更为强大和灵活的语言——Scala,来构建现代Web应用。随着技术的不断成熟,Scala.js已经成为越来越多开发者的首选工具之一...

    scala-2.12.7.zip

    这个压缩包“scala-2.12.7.zip”包含了Scala的特定版本——2.12.7,这是一个重要的更新,旨在提供稳定性和性能改进。Scala运行在Java虚拟机(JVM)上,因此它能够利用Java生态系统的广泛资源。 Scala的名字是...

    图解,Eclipse+ADT+ScalaIDE用Scala写Android程序

    这个过程涉及了Java语言替代品——Scala语言在Android开发中的应用。 Scala是一种静态类型的编程语言,它具有函数式编程和面向对象编程的特点,为开发者提供了更高级的抽象和语法糖,使得代码更加简洁和可读。将...

    scala 2.11.7 安装包

    标题“Scala 2.11.7安装包”指的是这个压缩文件包含了Scala编程语言的特定版本——2.11.7的安装资源。Scala的版本号通常由主要版本号、次要版本号和修订版本号组成,如2.11.x。这里的2.11代表次要版本,而7是修订...

    面向 Java 开发人员的 Scala 指南系列.rar

    8. **Dotty 和 Scala 3**:Scala 社区正在开发下一代 Scala 版本——Scala 3(以前称为 Dotty),它旨在解决 Scala 2 中的一些复杂性和不一致性,提供更好的互操作性与简化语法。 9. **Scalactic 和 ScalaTest**:...

    Scala.pdf中文高清第二版

    2. **面向对象编程**:Scala支持传统的类和对象,同时引入了特质(trait),它们可以用来实现多重继承和行为组合。另外,Scala中的一切都是对象,包括函数,这被称为"一切皆对象"的概念。 3. **函数式编程**:Scala...

    scala-2.12.8.msi.zip

    此外,Scala还引入了Actor模型,这是处理并发和并行计算的一种方式,通过隔离状态和消息传递来避免竞态条件。 在Scala中,你可以使用Akka库来构建分布式、容错的应用系统。Akka是基于Actor模型的,它简化了在多核、...

    flink-1.7.1-bin-scala_2.12.tgz

    标题中的"flink-1.7.1-bin-scala_2.12.tgz"指的是Apache Flink的一个特定版本——1.7.1的二进制发行版,它与Scala 2.12版本兼容。Flink是一个开源的流处理和批处理框架,广泛应用于大数据处理领域。这个压缩包包含了...

    scala-2.11.8.tar.gz

    这个"scala-2.11.8.tar.gz"文件是Scala编程语言的特定版本——2.11.8的归档包,通常用于Linux或类Unix系统。这个版本号表明它是一个更新稳定版,2.11.x系列是Scala的一个长期支持(LTS)分支,意味着它会得到较长...

    flink-1.11.0-bin-scala_2.11.tgz

    本次我们关注的是 Flink 的一个特定版本——1.11.0,它包含了 Scala 2.11 的绑定,这意味着开发者可以利用 Scala 这种函数式编程语言来编写 Flink 作业。 Flink 1.11.0 的发布带来了许多增强和改进。首先,它优化了...

    Scala编程-前13章-p183.7z

    同时,Scala还引入了case类,为创建不可变数据类型提供了一种简洁的方式,这对于函数式编程尤为重要。 函数式编程在Scala中占据了重要地位。你将学习到如何使用map、filter、reduce等函数对集合进行操作,以及如何...

    Lego-scala-meetingup.pdf

    文件标题为“Lego-scala-meetingup.pdf”,描述中同样提到该文件名,标签包括“scala”和“lego”。部分内容涉及Scala编程语言与一个名为LEGO的框架或系统。下面将详细解释文件中涉及的核心概念和技术实践。 ### ...

    sbt资源包,全平台版本sbt-platform

    **Sbt资源包详解——全平台版本Sbt-Platform** Sbt(Simple Build Tool)是Scala项目的主要构建工具,它以其高效、灵活和强大的特性深受开发者喜爱。在 Scala 开发环境中,Sbt 起到了核心作用,它负责编译、测试、...

    Safe Type-level Abstraction in Scala

    本文探讨的主题——安全的类型级抽象在Scala中的应用,是理解该语言高级特性的关键所在。类型抽象是指在程序设计中,通过定义泛型或参数化类型来实现代码的复用性和灵活性。而类型级抽象则进一步将这种抽象概念应用...

    killbill-api-0.1.68.zip

    今天,我们将深入探讨一个名为"killbill-api-0.1.68.zip"的开源项目,该项目包含了一个实验性的Scala库——Scala.Rx,它是一种函数式反应式编程(FRP)库。让我们一起揭开这个神秘面纱,了解其背后的技术原理和应用...

Global site tag (gtag.js) - Google Analytics