Scala起步--从Java到Scala

Scala 中直接的 object 定义代表的是单件模式,即只有一个对象存在,Scala中没有static

object HelloWorld {
  def main(args: Array[String]) {
    println("Hello, world!")
  }
}

在Scala中可以直接import Java中的包,import全部用_而不是*,因为*在Scala中可以作为方法名存在,import多个可以用{}

import java.util.{Date, Locale}
import java.text.DateFormat
import java.text.DateFormat._

在Scala中单参数方法可以用下面两种等价的方式调用

obj.method(var)

obj method var

在Scala中真正一切都是对象,包括内置类型和函数,大多说函数式编程语言都将函数作为一等公民对待,这可以参考函数式语言的相关资料

1 + 2 * 3 / x
等价于
(1).+(((2).*(3))./(x))

1的括号是必须的,否则1与.一起解释为1.0,成为了一个浮点数

函数当做对象在Java中的处理就是callback方法,注意Unit(uninterested)等价于void,函数的类型由参数和返回值决定

object Timer {
  def oncePerSecond(callback: () => Unit) {
    while (true) { callback(); Thread sleep 1000 }
  }
  def timeFlies() {
    println("time flies like an arrow...")
  }
  def main(args: Array[String]) {
    oncePerSecond(timeFlies)
  }
}
在上例中直接使用匿名函数:

object TimerAnonymous {
  def oncePerSecond(callback: () => Unit) {
    while (true) { callback(); Thread sleep 1000 }
  }
  def main(args: Array[String]) {
    oncePerSecond(() =>
      println("time flies like an arrow..."))
  }
}
注意在参数中直接使用匿名函数要用=>把参数列表和函数体分离开来,这里的()代表的是一个空的参数列表

Scala中的类可以含有参数,并且在Scala中可以不用明确指出类型,编译器可以推测出

class Complex(real: Double, imaginary: Double) {
  def re() = real
  def im() = imaginary
}

当方法不用参数时,在定义时可以省略括号,这样在调用时也就可以省略括号,就像直接访问类成员变量一样

class Complex(real: Double, imaginary: Double) {
  def re = real
  def im = imaginary
}

Scala中类也组成了一颗继承树的结构,不同的是默认继承自scala.AnyRef

重载继承方法必须用override关键字明确指出

class Complex(real: Double, imaginary: Double) {
  def re = real
  def im = imaginary
  override def toString() =
    "" + re + (if (im < 0) "" else "+") + im + "i"
}



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值