目录java
不能使用保留字.数据库
val xyz_++= = 1
能够经过反引号定义标识符,两个反引号内的任意长度的字符串即是定义的标识符.ide
def `test that addition work`= assert(1 + 1 = 2)
List(1, 2, 3, 4).filter((i: Int) => isEven(i)).foreach((i: Int) => println(i)) List(1, 2, 3, 4).filter(i => isEven(i)).foreach(i => println(i)) List(1, 2, 3, 4).filter(isEven).foreach(println) List(1, 2, 3, 4) filter isEven foreach println
1. 全部字母 2. | 3. ^ 4. & 5. < > 6. = ! 7. : 8. + - 9. * / % 10. 其余特殊字符
::
方法将某一元素放置到列表前面scala> val list = List('c', 'd') list: List[Char] = List(c, d) scala> 'a' :: list res1: List[Char] = List(a, c, d) scala> val list = List('c', 'd') list: List[Char] = List(c, d) scala> 'b' :: list res2: List[Char] = List(b, c, d) scala> list.::('a') res3: List[Char] = List(a, c, d) scala> 'a' :: list res4: List[Char] = List(a, c, d) scala> 'b' :: list res5: List[Char] = List(b, c, d)
注意:this
'a' :: list
等价于 list.::('a')
编码
不能使用该方法重复插入多个字符es5
Scala的if语句能够向Java中同样使用scala
if (2 + 2 = 5) { println("if") } else if (2 + 2 = 3) { println("else if") } else { println("else") }
Scala中的if语句是有返回值的. 能够将if表达式的结果值赋值给其余变量. 如下面代码为例.code
val configFile = new java.io.File("someFile.txt") val configFilePath = if (configFile.exists()) { configFile.getAbsolutePath() } else { configFile.createNewFile() configFile.getAbsolutePath() }
if语句返回值的类型也被称为全部条件分支的最小上界类型,也就是与每条each子句可能返回值类型最接近的父类型.在上面例子中,configFilePath
是if表达式的结果值,该if表达式将执行文件不存在的条件分支(假定),并返回新建立文件的绝对路径.将if语句的返回值赋予变量configFilePath
.orm
Scala不支持三元表达式对象
val list = List("A", "B", "C") for (item <- list) println(item)
A B C
item <- list
这样的表达式被称为生成器表达式val list = List("ABC", "CDE", "EFG") for (item <- list if item.contains("C") ) println(item)
ABC CDE
val list = List("ABC", "BCD", "CDE") for (item <- list if item.contains("B") if !item.startsWith("A") ) println(item) for (item <- list if item.contains("B") && !item.startsWith("A") ) println(item)
BCD BCD
yielding
关键字能在for表达式中生成新的集合val list = List("ABC", "BCD", "CDE") val filterItems = for {item <- list if item.contains("B") if !item.startsWith("A") } yield item filterItems
scala> val list = List("ABC", "BCD", "CDE") list: List[String] = List(ABC, BCD, CDE) scala> val filterItems = for {item <- list | if item.contains("B") | if !item.startsWith("A") | } yield item filterItems: List[String] = List(BCD)
val list = List("abc", "bcd", "cde") val upcaseItems = for { item <- list upcaseItem = item.toUpperCase() } yield upcaseItem
scala> val list = List("abc", "bcd", "cde") list: List[String] = List(abc, bcd, cde) scala> | val upcaseItems = for { | item <- list | upcaseItem = item.toUpperCase() | } yield upcaseItem upcaseItems: List[String] = List(ABC, BCD, CDE)
while (表达式) { do something }
var count = 0 do { count += 1 } while(count < 10)
操做符 | 操做 |
---|---|
&& | 和操做 |
|| | 或操做 |
> | 大于 |
>= | 大于或等于 |
< | 小于 |
<= | 小于或等于 |
== | 等于 |
!= | 不等于 |
&&
和 ||
是短路操做符
在Java中==
只会对对象引用进行比较, 调用equals
来比较字段值; Scala使用==
符执行逻辑上的相等检查. 即调用equals
方法进行判断.
public class Person { private String name; private int age; public Person(String name, int age) { this.name = name; this.age = age; } public boolean equals(Object obj) { return true; } public static void main(String args[]) { Person p1 = new Person("sun", 20); Person p2 = new Person("li", 20); System.out.println(p1 == p2); } } // 输出: false
class Person(var name: String, var age: Int) { override def equals(obj: scala.Any): Boolean = true } val p1 = new Person("sun", 20) val p2 = new Person("sun", 20) println(p1 == p2) // 输出: true
case NonFatal(ex) => ...
子句使用scala.util.control.NonFatal
匹配了全部的非致命性异常throw new MyBadException(...)
抛出异常try { ... } catch { case NonFatal(ex) => println(s"Non fatal exception! $ex") case ... } finally { ... }
object ExpensiveResource { lazy val resource: Int = init() def init(): Int = { // 某些代价昂贵的操做 0 } }
// file: enum.scala object Breed extends Enumeration { type Breed = Value val doberman = Value("Doberman Pinscher") val yorkie = Value("Yorkshire Terrier") val scottie = Value("Scottish Terrier") val dane = Value("Great Dane") val portie = Value("Portuguese Water Dog") } import Breed._ println("ID\tBreed") for (breed <- Breed.values) println(s"${breed.id}\t$breed") println("\nJust Terriers:") Breed.values filter (_.toString.endsWith("Terrier")) foreach println def isTerrier(b: Breed) = b.toString.endsWith("Terrier") println("\nJust Terriers:") Breed.values filter isTerrier foreach println
scala enum.scala
ID Breed 0 Doberman Pinscher 1 Yorkshire Terrier 2 Scottish Terrier 3 Great Dane 4 Portuguese Water Dog Just Terriers: Yorkshire Terrier Scottish Terrier Just Terriers: Yorkshire Terrier Scottish Terrier
下面是一个简单示例:
val name = "Buck Trends" println(s"Hello, $name")
下面是几个对可插入字符串进行格式化的示例.
scala> val gross = 100000F gross: Float = 100000.0 scala> val net = 64000F net: Float = 64000.0 scala> val percent = (net / gross) * 100 percent: Float = 64.0 scala> println(f"$$${gross}%.2f vs. $$${net}%.2f or ${percent}%.1f%%") $100000.00 vs. $64000.00 or 64.0% scala> val s = "%02d: name = %s".format(5, "Dean Wampler") s: String = 05: name = Dean Wampler // 原生插入器 scala> val name = "Dean Wampler" name: String = Dean Wampler scala> s"123\n$name\n456" res1: String = 123 Dean Wampler 456 scala> raw"123\n$name\n456" res2: String = 123\nDean Wampler\n456
$$
打印一个$
%%
打印一个%