JAVA中,举例你S是一个字符串,那么s(i)就是该字符串的第i个字符(s.charAt(i)).Scala中使用apply的方法
JAVA与C++的?:操作符 等同于Scala的
if ( x > 0) 1 else -1
x>0 ? 1: -1 //JAVA或C++
在Scala中,每个表达式都有一个类型,如下:
if ( x > 0) "positive" else -1
其中一个分支是java.lang.String 而另一个分支是Int,他们的公共超类型是Any
使用如下会报错:
if(x > 0) 1 else if( x == 0) 0 else -1
改为
if(x > 0){ 1 }else if (x== 0) 0 else -1
高级for 循环 可以使用变量<- 表达式 的形式提供多个生成器,用分号将其隔开
如果for循环的循环体以yield开始,则循环会构造出一个结合,每次迭代生成集合中的一值:
每个生成器都自带一个守卫,以if开头的Boolean表达式
可以任意多的定义,引入可以在循环中使用变量
定义函数:Scala一般不需要声明返回值类型,会自己推断,但使用递归的时候 必须指定返回类型:
默认参数和带名参数(什么鬼,Java的思想被颠覆)
过程,Scala对于不返回值的函数有特殊的表示语法,如果函数体包含在花括号中但没有前面的=号,那么返回类型就是Unit
或def box(s : String) : Unit = { ...} 显示声明Unit返回类型
数组:
声明一个空的数组缓冲,用+=在尾端添加元素,用()而不是用{} 移除用trimEnd
也可在任意位置插入或移除元素 其中remove方法第二个参数为要删除多少个
遍历数组 使用的是until ,它属于RichInt类的方法,返回所有小于(但不包括)上限的数字。
常用算法
使用sum方法,元素类型必须是数值类型,要么是整型,要么是浮点型或者integer,decimal
sorted方法将数组或数组缓冲排序并返回经过排序的数组或数组缓冲
val b = ArrayBuffer(1, 7, 2, 9)
val bSorted = b.sorted(_ < _)
如果要显示数组或数组缓冲的内容,可以用mkString方法,它允许你指定元素之间的分隔符。toString返回的值就无意义了
使用List 使用:: 把一个新元素组合到已有List的最前端,然后返回结果List
使用元组Tuple:
与列表一样,元组也是不可变的,但与列表不同,元组可以包含不同类型的元素。而列表应该是List[Int]或List[String]的样子,元组可以同时拥有Int和String。元组很有用,比方说,如果你需要在方法里返回多个对象。Java里你将经常创建一个JavaBean样子的类去装多个返回值,Scala里你可以简单地返回一个元组。而且这么做的确简单:实例化一个装有一些对象的新元组,只要把这些对象放在括号里,并用逗号分隔即可。一旦你已经实例化了一个元组,你可以用点号,下划线和一个基于1的元素索引访问它.
使用Set和Map
创建,初始化和使用可变集合
Map是Scala里另一种有用的集合类。和集一样,Scala采用了类继承机制提供了可变的和不可变的两种版本的Map,,Map的类继承机制看上去和Set的很像。scala.collection包里面有一个基础Map特质和两个子特质Map:可变的Map在scala.collection.mutable里,不可变的在scala.collection.immutable里。
函数式风格:
import scala.collection.mutable.Map
更函数式的方式应该是定义对需打印的arg进行格式化的方法,但是仅返回格式化之后的字串