那天的两个疑问,今天有了答案:
1. 为什么Scala没有i++或++i这样的写法?
因为在Scala里,“+-*/”都是可用作方法的,比如:1 + 2,可以写成:(1).+(2),那么1++应该怎么写呢?还真想不出来吧?(1).+.+?由此可以看出,Scala的面向对象程度比Java深多了。
2. 为什么数组访问用圆括号而非方括号?
我们知道,在Java里定义数组:
String arr[] = new String[3];
arr[0] = "Hello";
arr[1] = ", ";
arr[2] = "World.";
而在Scala中定义数组为:
val arr = new Array[String](3)
arr(0) = "Hello"
arr(1) = ", "
arr(2) = "World."
为什么Scala用圆括号呢?这是因为,在Scala中,数组也是类的实例。所以,基于这,用圆括号。
实际上,数组元素调用时,是调用一个叫apply的方法的:
scala> arr.apply(2)
res16: String = World.
scala> arr(2)
res17: String = World.
arr(2)跟arr.apply(2)是一样的。
同样,数组元素赋值时,是调用一个update的方法:
scala> arr(2)
res22: String = World.
scala> arr(2) = "World."
scala> arr.update(2, "World...")
scala> arr(2)
res25: String = World...
可见,arr(2) = "World."跟arr.update(2, "World...")是一样的。
顺便说一点,数组的定义同样遵循类型推断的逻辑,如果可以进行类型推断,那么允许简写:
val arr: Array[String] = new Array[String](3) //完整写法
val arr = new Array[String](3)
另一种简洁写法:
scala> val arr = Array("Hello", ", ", "World.")
arr: Array[String] = Array(Hello, ", ", World.)
这种写法相当于:
scala> val arr = Array.apply("Hello", ", ", "World.")
arr: Array[String] = Array(Hello, ", ", World.)
总之Scala处处体现了简洁高效,这个简洁是相对应于类型推断而言的,实际上,从语法角度,类型推断导致的多样性增加了语法复杂度,但习惯就好啊。
阅读(1578) | 评论(0) | 转发(0) |