Scala 系列 - 包和引入

本文主要对 Scala 中的包和引入进行介绍

  • 同一个包可以定义在多个文件中
  • 不同的包也可以定义在同一个文件中
  • 包可以包含类,对象和特质,但是不能包含函数或者变量的定义(引出了包对象的出现)

作用域

  • 底层可以访问上层作用域内的名称

因为在 Scala 中包名是相对的,所以如果出现下面的情况,

package collection{
	class test{
	val a = new collection.mutable.ArrayBuffer[Int]()}
}

本来想使用scala.collection下面的数据结构,但是像上面的定义,编译器会尝试在collection包下查找mutable,最终会报错。

所以一般会使用完整包名

val a = new _root_.scala.collection.mutable.ArrayBuffer[Int]()
// 或者
val a = new scala.collection.mutable.ArrayBuffer[Int]()

包的表示

  • 包括嵌套标记法和文件顶部标记法
package p1{
	package p2{
		// 可以访问p1下的成员
		...
	}
}
// 或者
package p1
package p2
...
package p1.p2{
	// 访问不到p1下的成员
}
// 或者
package p1.p2
...

包对象

  • 每个包都可以有一个包对象,需要在父包中定义,名字与子包相同
  • 包对象中可以包含工具函数或者常量
package p1
// 包对象
package object p2{
	// 外界可以通过p1.p2.a访问到这个变量
	val a = 1
}
package p2{
	...
}

包可见性

package p1.p2.p3
class c3{
	// 只在p3中可见
	private [p3] def test3 = println("test3")
	// 拓展到p2中也可见
	private [p2] def test2 = println("test2")
}

包的引入

// 导入Map
import scala.collection.mutable.Map
// 导入Map和Arraybuffer
import scala.collection.mutable.{Map, Arraybuffer}
// 重命名Map
import scala.collection.mutable.{Map => Mymap}
// 导入包下全部成员
import scala.collection.mutable._

并且 Scala 中,import 语句可以出现在任何地方,并不限于文件顶部,且 import 语句的效果一直延申到包含该语句的块末尾。

参考资料:《快学Scala》

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值