#表达式# scala中(几乎)一切都是表达式。 #值# 值用val修饰,其值不可变 #变量# 变量使用var修饰,值可以改变 #函数# ##普通函数## 可以使用def创建函数。
scala> def addOne(m:Int):Int=m+1
addOne: (m: Int)Int
在scala中,你需要为函数参数指定类型签名。
scala> val three =addOne(2)
three: Int = 3
如果函数不带参数,可以不写括号。
scala> def three()=1+2
three: ()Int
scala> three()
res8: Int = 3
scala> three
res9: Int = 3
##匿名函数## ##部分应用(Partial application)# 可以使用下划线“_”部分应用一个函数,结果将得到另一个函数。Scala使用下划线表示不同上下文中的不同事物,你通常可以把它看作是一个没有命名的神奇通配符。在{ _ + 2 }的上下文中,它代表一个匿名参数。你可以这样使用它:
scala> def adder(m:Int,n:Int)=m+n
adder: (m: Int, n: Int)Int
scala> val add2=adder(2,_:Int)
add2: Int => Int = <function1>
scala> add2(4)
res0: Int = 6
scala> val add3=adder(_:Int,4)
add3: Int => Int = <function1>
scala> add3(4)
res1: Int = 8
你可以部分应用参数列表中的任意参数,而不仅仅是最后一个。 ##柯里化函数## #可变长度参数# 这是一个特殊的语法,可以向方法传入任意多个同类型的参数。如要在多个字符串上执行String的capitalize函数,可以这样写:
scala> def capitalizeAll(args: String*) = {
| args.map { arg =>
| arg.capitalize
| }
| }
capitalizeAll: (args: String*)Seq[String]
scala> capitalizeAll("rarity", "applejack")
res7: Seq[String] = ArrayBuffer(Rarity, Applejack)
#类# ##申明类##
scala> class Calculator{
| val brand:String="HP"
| def add(m:Int,n:Int):Int=m+n
| }
defined class Calculator
scala> val calc=new Calculator
calc: Calculator = Calculator@64c6e553
scala> calc.add(1,2)
res3: Int = 3
scala> calc.brand
res4: String = HP
以上的例子展示了如何在类中用def定义方法和使用val定义字段值,方法就是可以访问类的状态的函数。 ##构造函数## 构造函数不是特殊的方法,他们是除了类的方法定义之外的代码。
scala> class Calculator(brand: String) {
| /**
| * A constructor.
| */
| val color: String = if (brand == "TI") {
| "blue"
| } else if (brand == "HP") {
| "black"
| } else {
| "white"
| }
|
| // An instance method.
| def add(m: Int, n: Int): Int = m + n
| }
defined class Calculator
scala> val calc=new Calculator("HP")
calc: Calculator = Calculator@25e95a0e
scala> calc.color
res5: String = black
##表达式## 上面的例子说明了scala是如何面向表达式的。颜色的值就是绑定在一个if、else表达式上的。scala是高度面向表达式的:大多数东西都是表达式而非指令。 ##函数VS方法## #继承# ##重载方法## ##抽象类## #特质(Traits)# #类型#