Scala 包和引入

2017-10-02  本文已影响0人  wangdy12

有两种方法来声明包,并把代码放入其中

任何顶层包都被当做_root_包的成员,当包名称冲突时,可以从最外层指定包名

package bobsrockets.navigation
class Navigator

package bobsrockets.navigation {
  class Navigator
}

//将文件的不同部分放在不同的包中
package bobsrockets {
  package navigation {
    // In package bobsrockets.navigation
    class Navigator
    package tests {
      // In package bobsrockets.navigation.tests
      class NavigatorSuite
    }
  }
}

//避免花括号导致代码右移的写法
package bobsrockets 
package navigation 
class Navigator

当访问同一个包中的代码时,可以使用简短的非限定名称,省略部分前缀

引入包

import scala.collection._   //引入collection中的所有成员
import scala.collection.Vector 
import scala.collection.{Vector, Sequence}  //选择性导入一个或多个
import scala.collection.{Vector => Vec28}   //重命名导入
import java.util.{Date => _, _} //导入java.util包里除Date之外的所有文件

隐式引入

import java.lang._
import scala._//包含Scala的标准库,例如List
import Predef._//Predef对象包含类型定义,方法,隐式转换等

Scala中引入可以出现在任何地方,不必出现在文件的开始

def showFruit(fruit: Fruit) = {
  import fruit._
  println(name + "s are " + color)
}

访问修饰符

总体和Java类似,有一些不同

private[X]protected[X]:限定访问是私有的或者受保护的,直到X作用域以内

private[this]:对象私有,object-private,只有对象自己在类内部可以访问,其他相同的实例对象都不能访问

伴生对象:只有一个实例,实现static的功能,拥有对应类的所有访问权限

包对象

添加了关键字object,作用域是整个包,添加一些帮助方法,类型别名,隐式转换等

package object bobsdelights {
  def showFruit(fruit: Fruit) = {
    import fruit._
    println(name + "s are " + color)
  }
}
上一篇下一篇

猜你喜欢

热点阅读