Chinaunix首页 | 论坛 | 博客
  • 博客访问: 553573
  • 博文数量: 233
  • 博客积分: 2221
  • 博客等级: 大尉
  • 技术积分: 3184
  • 用 户 组: 普通用户
  • 注册时间: 2010-02-16 14:01
个人简介

瓜瓜派的瓜瓜

文章分类

全部博文(233)

文章存档

2013年(28)

2012年(197)

2011年(8)

分类: Java

2013-01-26 16:49:09

那天的两个疑问,今天有了答案:

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处处体现了简洁高效,这个简洁是相对应于类型推断而言的,实际上,从语法角度,类型推断导致的多样性增加了语法复杂度,但习惯就好啊。



阅读(1278) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~