Scala偏函数(partial function)示例

// 偏函数(partial function)的用途是描述只对定义域中一部分取值或类型有意义的函数

object ScalaPartialFunctionTest {

def main(args: Array[String]) {

// 可以用map()处理含有相同元素类型的集合

val cities = Map(

"Atlanta" -> "GA"

,"New York" -> "New York"

,"Chicago" -> &quo......

Scala中的闭包示例

// A closure is a function, whose return value depends on the value of

// one or more variables declared outside this function.

object ScalaClosureDemo {

def main(args: Array[String]) {

println( "multiplier(1) value = " + multiplier(1) )

println( "multiplier(2) value = " + mu......

Scala常用函数示例

// Reference: Functional Thinking Chapter 3

object ScalaExample {

def main(args: Array[String]) {

val numbers = List.range(1, 11);

val words = List("the", "quick", "brown", "fox", "jumped", "over", "the", "lazy", "......

Scala中的参数柯里化(currying)

object ScalaCurryTest {

def modN(n : Int)(x : Int) = ((x % n) == 0); // a currying function

def filter(xs : List[Int], p : Int => Boolean) : List[Int] =

if (xs.isEmpty) xs

else if (p(xs.head)) xs.head :: filter(xs.tail, p) // using recursion here

else filter(xs.tail, p)

def main(args : Array[S......

Scala中函数的部分施用(partial application)

object ScalaCurryTest {

def price(product : String) : Double =

product match {

case "apples" => 140

case "oranges" => 223

}

def withTax(cost : Double, state : String) : Double =

state match {

case "NY" => cost * 2

case "FL" => cost * 3

}

def ma......

NameCleaner Class

Scala与Shell的交互

scala.sys.process包提供了用于与shell程序交互的工具,用户可以用Scala编写shell脚本

import sys.process._

"ls -al .." ! //以上命令的执行结果会被打印到标准输出

!操作符返回的结果是被执行程序的返回值,成功的话返回0,否则返回非0值

如果使用!!而不是!的话,输出会以字符串的形式返回

val result = "ls -al .." !!

可以通过#|操作符将一个程序的输出以管道的形式传送到另一个程序

"ls -al .." #| ......

Scala的读写

读取文件

按行读取文件

import scala.io.Source

val source = Source.fromFile("myfile.txt", "UTF-8") // 第一个参数可以是字符串或者是java.io.File;若省略第二个参数,则使用当前平台缺省的字符编码

val lineIterator = source.getLines

for (l <- lineIterator) 处理l

source.close() // 处理完source对象后,记得close

也可以对迭代器使用toArray或toBuffer方法

......

Scala的包

包的作用域

与Java不同,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) {

salary += Utils.percentOf(salary, rate) // 所有父包中的内容都在作用域内

}

}......

Scala的对象

单例对象

Scala没有静态方法或静态字段,需要通过单例来实现

object Accounts {

private var lastNumber = 0

def newUniqueNumber() = { lastNumber += 1; lastNumber }

}

当用户在程序中需要一个新的唯一账号时,调用Account.newUniqueNumber()即可

伴生对象

在Scala中,可以通过类和类同名的“伴生”对象来实现既有实例方法又有静态方法的类

class Account {

val id = Account.newUniqueNumber() // 调用伴......