Scala的符号入门

Posted Amazing Code!

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Scala的符号入门相关的知识,希望对你有一定的参考价值。

Spark是由Scala编写的。Spark作为一款十分易用高效的大数据框架使用越来越广泛,Scala也随之有更多的人去学习。
语言相通,相信有python、java基础的程序员学习Scala并没有太大的难度。但是Scala程序中奇奇怪怪的操作符却让人十分挠头。
Scala的教程大多都是从变量定义、函数、类等入门,我们直接从Scala符号入门,直接从代码中体会Scala的特性。

1. 怪符<-

经常在for循环中的使用,被称生成器(generator)。

在执行过程中,集合filesHere中(Array[File])的元素将依次赋给file,file类型为File,打印时调用其toString方法将文件名称打印出来。

val filesHere = (new java.io.File(".")).listFiles
//直接遍历数组元素
for (file <- filesHere)
     | println(file)

//间接遍历数组
for (i <- 0 to filesHere.length - 1)
println(filesHere(i))

还可以配合 untilif等加入一些限制条件。

for(i <- res39) println("Iteration"+i)

for(i <- 1 to 5) println("Iteration"+i)

// 这样写看着奇怪,是同楼上一样的
for(i <- 1 .to(5)) println("Iteration"+i)

//如果不需要5出现,则用until
scala> for(i <- 1 until 5) println("Iteration"+i)

//加入if条件
for (file <- filesHere if file.getName.endsWith(".scala"))
println(file)

2. 怪符->

这个符号用于Map(映射)。Map是一种可迭代的键值对(key/value)结构。默认情况下 Scala 使用不可变 Map。 如果要使用可变集合,需要显式的引入 import scala.collection.mutable.Map 类

// 空哈希表,键为字符串,值为整型
var A:Map[Char,Int] = Map()

// 需要添加 key/value对,可以使用 + 号
A += ('I' -> 1)
A += ('J' -> 5)
A += ('K' -> 10)
A += ('L' -> 100)

// Map 键值对演示
val B = Map("red" -> "#FF0000", "azure" -> "#F0FFFF")

//使用 ++ 运算符或 Map.++() 方法来连接两个 Map,Map 合并时会移除重复的 key
//  ++ 作为运算符
var ab = A ++ B
//  ++ 作为方法
ab = A.++(B)

3. 怪符=>

类似于转化符号,=> 指明这个函数把左边的东西(任何整数x)转变成右边的东西(x + 1)。所以,这是一个把任何整数x映射为x + 1的函数。有点像匿名函数,匿名函数由参数列表,箭头连接符=>和函数体组成。

// 定义匿名函数
val cube = (x: Int) => x * x *x 

(x: Int)是匿名函数的参数,x * x *x 是函数体,箭头连接符=> 连接参数列表和函数体。

Scala中的=>符号也可以看做是创建函数实例的语法糖。例如:A => TA,B => T表示一个函数的输入参数类型是“A”,“A,B”,返回值类型是T。

val f: Int => String = myInt => "The value of myInt is: " + myInt.toString()
println(f(3))

上面例子定义函数f:输入参数是整数类型,返回值是字符串。

另外,() => T表示函数输入参数为空,而A => Unit则表示函数没有返回值。

4. 怪符_

这个和python一样了,是一个程序员懒得命名的变量。有时候也当通配符用的。

以上是关于Scala的符号入门的主要内容,如果未能解决你的问题,请参考以下文章

一篇入门 — Scala 宏

如何在 Javadoc 中使用 @ 和 符号格式化代码片段?

在 Scala 中使用符号的实际例子?

Scala - 中缀与点符号

Scala 无法解决符号退出

Scala学习之路----基础入门