表达式,值,变量,代码块,函数,方法

// 表达式
1 + 1
println(1 + 1) // 2
// 值(values)使用 val 关键字声明,带初值时类型可省略。
val x = 1 + 1
println(x) // 2
val x: Int = 1 + 1
// x = 3
// 变量(variables)使用 var 关键字声明,带初值时类型可省略。
var x = 1 + 1
var x: Int = 1 + 1
x = 3
// 代码块(blocks): 使用大括号括起来,代码块的值由最后一句表达式语句的值来决定。
println({
val x = 1 + 1
x + 1
}) // 3
// 函数(functions): 参数类型不可省略,返回值的类型可省略。
(x: Int) => x + 1
val addOne = (x: Int) => x + 1
println(addOne(1)) // 2
// 函数可以有多个参数
val add = (x: Int, y: Int) => x + y
println(add(1, 2)) // 3
// 函数也可以没有参数
val add = (x: Int, y: Int) => x + y
println(add(1, 2)) // 3
// 方法(methods): 使用 def 关键字声明,参数类型不可省略,返回值的类型可省略。
def add(x: Int, y: Int): Int = x + y
println(add(1, 2)) // 3
// 方法可以有多个参数列表
def addThenMultiply(x: Int, y: Int)(multiplier: Int): Int = (x + y) * multiplier
println(addThenMultiply(1, 2)(3)) // 9
// 方法也可以没有参数
def name: String = System.getProperty("name")
println("Hello, " + name + "!")
// 方法的值取决于最后一句表达式语句的值
def getSquareString(input: Double): String = {
val square = input * input
square.toString
}

类,样例类,单例对象,特质,Main方法

// 类(classes)的定义
class Greeter(prefix: String, suffix: String) {
def greet(name: String): Unit =
println(prefix + name + suffix)
}
// 用关键字 new 创建类的实例
val greeter = new Greeter("Hello, ", "!")
greeter.greet("Scala developer") // Hello, Scala developer!
// 样例类(case classes)
case class Point(x: Int, y: Int)
// 创建样例类的实例不用 new
val point = Point(1, 2)
val anotherPoint = Point(1, 2)
// 样例类的实例通过值来比较
if (point == anotherPoint) {
println(point + " and " + anotherPoint + " are the same.")
} else {
println(point + " and " + anotherPoint + " are different.")
}
// Point(1,2) and Point(1,2) are the same.
// 单例对象
object IdFactory {
private var counter = 0
def create(): Int = {
counter += 1
counter
}
}
// 通过对象的名字来调用它的方法
val newId: Int = IdFactory.create()
println(newId) // 1
val newerId: Int = IdFactory.create()
println(newerId) // 2
// 特质(traits)
trait Greeter {
def greet(name: String): Unit
}
trait Greeter {
def greet(name: String): Unit =
println("Hello, " + name + "!")
}
// 用类来扩展特质
class DefaultGreeter extends Greeter
class CustomizableGreeter(prefix: String, postfix: String) extends Greeter {
override def greet(name: String): Unit = {
println(prefix + name + postfix)
}
}
val greeter = new DefaultGreeter()
greeter.greet("Scala developer") // Hello, Scala developer!
val customGreeter = new CustomizableGreeter("How are you, ", "?")
customGreeter.greet("Scala developer") // How are you, Scala developer?
// Main 方法(在单例对象中定义)
object Main {
def main(args: Array[String]): Unit =
println("Hello, Scala developer!")
}

类型层次

Any 类型是所有类型的超类型。

AnyVal 类型代表值类型。

AnyRef 类型代表引用类型。

Nothing 类型是所有类型的子类型。该类型只有一个实例: null。

val list: List[Any] = List(
"a string",
732, // an integer
'c', // a character
true, // a boolean value
() => "an anonymous function returning a string"
)
list.foreach(element => println(element))

Scala语言学习笔记(2)的更多相关文章

  1. Scala语言学习笔记——方法、函数及异常

    1.Scala 方法及函数区别 ① Scala 有方法与函数,二者在语义上的区别很小.Scala 方法是类的一部分,而函数是一个对象可以赋值给一个变量.换句话来说在类中定义的函数即是方法 ② Scal ...

  2. Scala语言学习笔记(3)

    类 // 定义并使用类 class User val user1 = new User // 主体构造器(primary constructor) class Point(var x: Int, va ...

  3. Scala语言学习笔记(4)

    高阶函数 // 高阶函数 map val salaries = Seq(20000, 70000, 40000) val doubleSalary = (x: Int) => x * 2 val ...

  4. HTML语言学习笔记(会更新)

    # HTML语言学习笔记(会更新) 一个html文件是由一系列的元素和标签组成的. 标签: 1.<html></html> 表示该文件为超文本标记语言(HTML)编写的.成对出 ...

  5. Scala入门学习笔记三--数组使用

    前言 本篇主要讲Scala的Array.BufferArray.List,更多教程请参考:Scala教程 本篇知识点概括 若长度固定则使用Array,若长度可能有 变化则使用ArrayBuffer 提 ...

  6. 2017-04-21周C语言学习笔记

    C语言学习笔记:... --------------------------------- C语言学习笔记:学习程度的高低取决于.自学能力的高低.有的时候生活就是这样的.聪明的人有时候需要.用笨的方法 ...

  7. 2017-05-4-C语言学习笔记

    C语言学习笔记... ------------------------------------ Hello C语言:什么是程序:程序是指:完成某件事的既定方式和过程.计算机中的程序是指:为了让计算机执 ...

  8. GO语言学习笔记(一)

    GO语言学习笔记 1.数组切片slice:可动态增长的数组 2.错误处理流程关键字:defer panic recover 3.变量的初始化:以下效果一样 `var a int = 10` `var ...

  9. Haskell语言学习笔记(88)语言扩展(1)

    ExistentialQuantification {-# LANGUAGE ExistentialQuantification #-} 存在类型专用的语言扩展 Haskell语言学习笔记(73)Ex ...

随机推荐

  1. Spark机器配置计算

    ● Based on the recommendations mentioned above, Let's assign 5 core per executors => --executor-c ...

  2. JSP中的EL (Express Language表达式语言)

    EL语言的目的: 用于无java代码的JSP页面 创建el1.jsp,el2.jsp el1.jsp <%@ page language="java" contentType ...

  3. python下爬某个网页的图片

    #coding=utf-8 import re import urllib def getHtml(url): #获取url对应得源码 page = urllib.urlopen(url) html ...

  4. MySQL 中间件 mycat 的使用

    什么是MYCAT 一个彻底开源的,面向企业应用开发的大数据库集群 支持事务.ACID.可以替代MySQL的加强版数据库 一个可以视为MySQL集群的企业级数据库,用来替代昂贵的Oracle集群 一个融 ...

  5. 【python】重定向输出

    重定向的理解:就是把所要输出的结果输出到其他的地方.常用方法:"print >>",(若有其他方法后续补充) 举个例子: __author__ = 'paulwinfl ...

  6. InfluxDB 备份和恢复

    InfluxDB操作 . 显示数据库 > show databases > create database test > drop database test . 显示说有表 > ...

  7. 如何使用App.config文件,读取字符串?

    如何使用App.config文件,读取字符串? .在项目里添加App.config文件,内容如下: <?xml version="1.0" encoding="ut ...

  8. 第7章 进程关系(5)_贯穿案例2:mini shell(2)

    5. 贯穿案例2:mini shell(2) (1)己经完成的功能:pwd.cd.exit命令 (2)阶段性目标: ①env.export.echo及其他命令 ②标准输入.输出重定向"> ...

  9. 【基础知识六】支持向量机SVM

    开发库: libsvm, liblinear      GitHub地址 SVM难点:核函数选择 一.基本问题 找到约束参数ω和b,支持向量到(分隔)超平面的距离最大:此时的分隔超平面称为“最优超平面 ...

  10. 管理oracle 11g RAC 常用命令

    1).检查集群状态: [grid@rac02 ~]$ crsctl check cluster CRS-4537: Cluster Ready Services is online CRS-4529: ...