Scala 的变量、不变量

Scala没有constant这种常量的概念,只有变量、不变量,而数据结构比较抽象。 var定义的是变量,val对应的是不变量(对应的是Java的final,类似C++的常引用)。 容器: ArrayBuffer对应Java的Arraylist

Array其内容可以改变但是长度不能变,对应Java的数组

// 定义方式
val array:Array[String] = new Array[String](3);
// 当然如果你想写得更有动态语言的感觉可以,当然这个不是我的风格
val array = new Array[String](3);
// 下标访问
array(0);

List内容与长度都不可变

// 定义方式
val list:List[String] = List(1,2,3);
// 下标访问
list(0);

List必须在定义的时候就初始化内容。

Tuple这个其实很接近List[Any],内容和长度都不可变

// 定义方式,这里就不建议使用静态定义的方式去定义了,因为实在是太长了
val tuple = Tuple(1,"ashfghjgdf",new MyClass(111));
// 下标访问,是从1开始的
tuple._1;

Scala 的::与:::

我觉得这是个坑,很坑的坑。但是用起来倒也方便。

::是把前操作数放到后操作数的头,如:

scala> 1 :: List(2,3,4)
res0: List[Int] = List(1, 2, 3, 4)

scala> List(1,2) :: List(2,3,4)
res1: List[Any] = List(List(1, 2), 2, 3, 4)

:::是将前操作数跟后操作数连起来,如:

scala> 1:::List(2,3,4)
<console>:8: error: type mismatch;
 found   : Int
 required: List[?]
              1:::List(2,3,4)
               ^

scala> List(2,3,4):::List(2,3,4)
res1: List[Int] = List(2, 3, 4, 2, 3, 4)

:::前后操作数都必须是List[?]。::和:::都有一个共同点就是实际操作者是后操作数。即a::b 事实上是b.::(a)。