HelloWorld

从HelloWorld开始,使用scala IDE编辑器。

  • 新建scala project
  • 新建scala object
  • 编写HelloWorld
  • run as scala application
object HelloWorld {

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

表达式和值

scala中,几乎所有的元素都是表达式,以val定义常量,var定义变量

函数

可以使用def来定义一个函数。函数体是一个表达式。

使用Block表达式的时候,默认最后一行的返回是返回值,如果不是递归函数,无需显式指定。

函数还可以像值一样,赋值给var或val。因此函数也可以作为参数传给另一个函数

//定义函数,函数参数要指定类型签名
def square(a: Int) = a * a
def squareWithBlock(a: Int) = {
a * a
}
//定义匿名函数,匿名函数由参数列表,箭头连接符和函数体组成
val squareVal = (a: Int) => a * a def addOne(f: Int => Int, arg: Int) = f(arg) + 1 println("square(2):" + square(2))
println("squareWithBlock(2):" + squareWithBlock(2))
println("squareVal(2):" + squareVal(2))
println("addOne(squareVal,2):" + addOne(squareVal, 2))

执行结果:

square(2):4
squareWithBlock(2):4
squareVal(2):4
addOne(squareVal,2):5

def log(msg: => String)按名称传递,参数只有在实际使用时才计算

使用class定义类,使用new生成类,构造函数不是特殊的方法,他们是除了类的方法定义之外的代码

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
}
val calc = new Calculator("HP")
calc.color

特质(trait)

特质类似于java中interface,但trait则可以定义方法体,通过with关键字,一个类可以扩展多个特质:

在scala中重写一个方法是需要指定override关键词的。如果重写一个方法时,没有加上override关键词,那么scala编译会无法通过。

trait Friendly {
def greet() = "Hi"
} class Dog extends Friendly {
override def greet() = "Woof"
} class HungryDog extends Dog {
override def greet() = "I'd like to eat my own dog food"
} trait ExclamatoryGreeter extends Friendly {
override def greet() = super.greet() + "!"
} var pet: Friendly = new Dog
println(pet.greet()) pet = new HungryDog
println(pet.greet()) pet = new Dog with ExclamatoryGreeter
println(pet.greet()) pet = new HungryDog with ExclamatoryGreeter
println(pet.greet())

result:

Woof

I'd like to eat my own dog food

Woof!

I'd like to eat my own dog food!

类型

泛型,可以到用方括号语法引入的类型参数

object

scala中没有静态方法和属性,全部由singleton object(单例对象)来替代

参考文献

http://zh.scala-tour.com/#/welcome

http://twitter.github.io/scala_school/zh_cn/index.html

first step to scala

A Tour of Scala

广告

点击Spark加入群Spark,分享更多Spark相关信息

最新文章

  1. tomcat启动报错: org.apache.catalina.deploy.WebXml addFilter
  2. B/S系统常见缺陷整理和解决方案
  3. IDEA中,将文件夹加入classpath
  4. Linux下文件重命名、创建、删除、修改及保存文件
  5. c# XML省市联动
  6. [iOS]URL编码和解码
  7. .NET读写Excel工具Spire.Xls使用(1)入门介绍
  8. Appium 命令行模式下遇到的问题总结及解决方案 npm ERR! tar.unpack unzip(或者untar) error
  9. 【阿里聚安全·安全周刊】 全美警局已普遍拥有破解 iPhone 的能力 | 女黑客破解任天堂Switch,称硬件漏洞无法修复
  10. AJAX的简单解释
  11. github 解决 Agent admitted failure to sign using the key
  12. c/c++ 哈希表 hashtable
  13. android 获取文本框回车输入
  14. java创建线程的方法
  15. English trip Spoken English & Word List(updating...)
  16. Gym - 101806R :Recipe(分治+斜率优化)
  17. 【java】private关键字
  18. HttpSession javax.servlet.http.HttpServletRequest.getSession(boolean arg0)理解
  19. 【PHP】使用GD库实现 图像生成、缩放、logo水印和简单验证码
  20. 使用PowerShell替代WinDbg在高分辨率笔记本下调试、排错

热门文章

  1. day 22 内置的模块
  2. Python学习手册之正则表达式示例--邮箱地址提取
  3. PTA基础编程题目集7-3逆序三位数
  4. Python入门 (三)
  5. Sql Server char、varchar、nchar、nvarchar的区别
  6. Java设计模式(2)——创建型模式之工厂方法模式(Factory Method)
  7. 一个只有十行的精简MVVM框架(下篇)
  8. spring + mybatis 注解 @Transactional失效
  9. 「专题训练」k-Tree(CodeForces Round #247 Div.2 C)
  10. hdu1181变形课(floyd)