[关闭]
@amoszhou 2014-05-11T17:27:46.000000Z 字数 1151 阅读 1190

包和引入

scala


1.包

包的作用和Java中都是一样的,主要是为了方便管理类。不过scala中包的定义比较灵活,源文件的目录和包之间并没有强制的关联关系,这点和java不同,也就是说我们可以在一个原文件中为多个package贡献代码。我个人感觉最好还是采用Java的这种方式,主体上代码的结构更合理,更好管理。
语法还是这样package com.twitter.example

那么这个出发点是什么列?

2.作用域

包可以嵌套,比如:

  1. package com{
  2. package horsmann{
  3. object Utils{
  4. //....
  5. }
  6. package impatient{
  7. //可以直接用Utils对象的方法
  8. }
  9. }
  10. }

因为Utils处于上以及package中,所以子package可以直接使用,无需引入。

个人建议:对于包的定义,最好还是采用java风格,以避免不必要的麻烦

3.包对象

每个package都有个包对象(package object)。你需要再父包中定义它,且名称与子包一样。
《快学scala》有如下一句话:

把工具函数或常量添加都包中,比添加都某个工具类更合理
关于这点可以看下scala.math包

  1. package object people{
  2. val defaultName ="scala"
  3. }
  4. package people{
  5. class Person{
  6. var name = defaultName //从包对象中拿到常量
  7. }
  8. }

可以把包对象放到包目录下,包对象最好就统一叫package.scala,这样约定大家都懂。

4.包可见性

可以用private[package]的方式限定作用域。

  1. package com.aa.bb.cc
  2. class Person{
  3. private[cc] def description = "A person with name"
  4. }

那么 description方法就只能再cc包中访问。

5.包引入

通过import语句进行引入,再任何地方都可以引入。不限于文件顶部。

通配:用_,而不是*.这个与java不同,比如:import java.util._

引入部分成员(类):import java.awt.{Color,Font}
引入并且重命名:import java.util.{HashMap => JavaHashMap}
隐藏某个成员:

  1. import java.util.{HashMap =>_,_}
  2. import scala.collection.mutable._

这样我们用HashMap的时候就是指向mutable.HashMap。因为java.util.HashMap被隐藏了。

6.隐式引入

每个scala程序都隐式的以如下代码开始:

  1. import java.lang._
  2. import scala._
  3. import Predef_

Predef对象包含了相当多有用函数。

添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注