[scala之六]包的引入

 

一、包

1.命名空间目的:管理大中型程序中的名称。

2.scala中源文件目录和包之间没有强制的关联关系。

比如Employee和Manager没有必要在一个源文件中

package com {  

package horstmann {  

package impatient {  

class Employee {  }  

}  

}  

}  

 

package com {  

package horstmann {  

package impatient {  

class Manager{  }  

}  

}  

}  


 

3.在Scala中,包的作用域和其他作用域一样地支持嵌套,在下一层作用域中可以访问上一层作用域中的名称。

package com {  

package horstmann {  

object Utils {  

 def percentOf(value: Double, rate: Double) = value * rate / 100  

}  

package impatient {  

class Employee {  

  def giveRaise(rate: scala.Double) {  

    var salary = 100.0  

   salary += Utils.percentOf(salary, rate)  

 }  

}  

}  

}  

}  


二、串联式包语句

包语句可以包含一个“串”,或者说路径区段,例如:

package com.horstmann.impatient { 

//com和com.horstmann在这里不可见 

package people {  

class People {  

       

}  

}  

}  


三、包对象

包可以包含类、对象和特质,但不能包含函数或变量的定义,每个包都有一个包对象,你需要在父包中定义它,且名称与子包一样。

package com.horstmann.impatient  

package object people {  

  val defaultName = "John"  

}  

package people {  

class people {  

  var name = defaultName //从包对象拿到的常量  

}  

} 


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

四、引入

任何地方都可以声明引入,并不局限于文件顶部,import语句的效果一直延伸到包含该语句的块末尾。

Import java.awt.Color._

如果你想引入包中的几个成员,可以像这样使用选取器:import java.awt.{Color,Font}

选取器语法还允许你重命名选到的成员:import java.util.{HashMap=>JavaHashMap},选取器HashMap=>_将隐藏某个成员而不是重命名它。

五、隐式引入

每个Scala程序都隐式地以如下代码开始:

import java.lang._

import scala._

import Predef._

后面的引入可以覆盖之前的引入,scala.StringBuilder会覆盖java.lang.StringBuilder而不是与之冲突

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值