@amoszhou
2014-05-11T17:27:46.000000Z
字数 1151
阅读 1190
scala
包的作用和Java中都是一样的,主要是为了方便管理类。不过scala中包的定义比较灵活,源文件的目录和包之间并没有强制的关联关系,这点和java不同,也就是说我们可以在一个原文件中为多个package贡献代码。我个人感觉最好还是采用Java的这种方式,主体上代码的结构更合理,更好管理。
语法还是这样package com.twitter.example
那么这个出发点是什么列?
包可以嵌套,比如:
package com{
package horsmann{
object Utils{
//....
}
package impatient{
//可以直接用Utils对象的方法
}
}
}
因为Utils处于上以及package中,所以子package可以直接使用,无需引入。
个人建议:对于包的定义,最好还是采用java风格,以避免不必要的麻烦
每个package都有个包对象(package object)。你需要再父包中定义它,且名称与子包一样。
《快学scala》有如下一句话:
把工具函数或常量添加都包中,比添加都某个工具类更合理
关于这点可以看下scala.math包
package object people{
val defaultName ="scala"
}
package people{
class Person{
var name = defaultName //从包对象中拿到常量
}
}
可以把包对象放到包目录下,包对象最好就统一叫package.scala,这样约定大家都懂。
可以用private[package]
的方式限定作用域。
package com.aa.bb.cc
class Person{
private[cc] def description = "A person with name"
}
那么 description方法就只能再cc包中访问。
通过import
语句进行引入,再任何地方都可以引入。不限于文件顶部。
通配:用_,而不是*.这个与java不同,比如:import java.util._
引入部分成员(类):import java.awt.{Color,Font}
引入并且重命名:import java.util.{HashMap => JavaHashMap}
隐藏某个成员:
import java.util.{HashMap =>_,_}
import scala.collection.mutable._
这样我们用HashMap的时候就是指向mutable.HashMap。因为java.util.HashMap被隐藏了。
每个scala程序都隐式的以如下代码开始:
import java.lang._
import scala._
import Predef_
Predef对象包含了相当多有用函数。