学习笔记摘抄于Twitter scala文档:Twitter.github.io
next:Scala类&对象(一)
一 、为什么选择scala
表达能力
- 函数是一等公民
- 闭包
简洁
- 类型推断
- 函数创建的文法支持
Java互操作性
- 可重用Java库
- 可重用Java工具
- 没有性能惩罚
二、Scala如何工作
- 编译成Java字节码
- 可在任何标准JVM上运行
- 甚至是一些不规范的JVM上,如Dalvik
- Scala编译器是Java编译器的作者写的
三、Scala基础(常量/变量/函数)
常量
val two = 1 + 1
val three: Int = 3
变量
var name = "Steve"
name = "Allen"
函数(方法)
你可以用def创建函数
需要为函数参数指定类型签名
def addOne(m: Int): Int = m + 1
val three = addOne(2) //函数调用, three的值是3
如果函数不带参数,你可以不写括号调用。
def three() = 1 + 2
val a = three()
val b = three
匿名函数
val func = (x: Int) => x + 1
val three = func(2) //函数调用
如果你的函数有很多表达式,可以使用{}来格式化代码,使之易读。
def timesTwo(i: Int): Int = {
println("hello world")
i * 2
}
对匿名函数也是这样
val func1 = { i: Int =>
println("hello world")
i * 2
}
在将一个匿名函数作为参数进行传递时,这个语法会经常被用到。
部分应用(Partial application)函数
- 有些地方也叫做偏应用函数
- 你可以使用下划线“_”部分应用一个函数,结果将得到另一个函数。
- Scala使用下划线表示不同上下文中的不同事物,你通常可以把它看作是一个没有命名的神奇通配符。在{ _ + 2 }的上下文中,它代表一个匿名参数。
- 你可以这样使用它:
def adder(m: Int, n: Int) = m + n
val adder2 = adder(2, _: Int)
val res = adder(3) //调用部分应用函数,得到5
你可以部分应用参数列表中的任意参数,而不仅仅是最后一个。
柯里化函数
def multiply(m: Int)(n: Int): Int = m * n
val res = multiply(2)(3) //调用函数
你可以填上第一个参数并且部分应用第二个参数。
val timesTwo = multiply(2) _
val res = timesTwo(3) //return 6
你可以对任何多参数函数执行柯里化。例如之前的adder函数
val newFunc = (adder _).curried
可变长度参数
这是一个特殊的语法,可以向方法传入任意多个同类型的参数。例如要在多个字符串上执行String的capitalize函数,可以这样写:
def capitalizeAll(args: String*) = {
args.map { arg =>
arg.capitalize
}
}
var res = capitalizeAll("rarity", "applejack")
网友评论