Scala学习笔记(六) - 操作符与字面量

来源:互联网 发布:jquery清空表单数据 编辑:程序博客网 时间:2024/04/19 05:34

Scala中的字面量与Java中的基本一样,只有String类型略有差别。

例如:

val i =1 (普通数字)

val i = 0xf(16进制)

val i = 35L(long)

val big = 1.2345   浮点数

val big = 1.2345el

val big = 1.2345E45

字符串:

Scala中的转义字符与Java一致例如:

\n 换行

\t 制表

等等

同时使用 反斜杠进行转义

对于大量转义字符及换行的字符串可以使用三个双引号,例如:

val stringSample = """Welcome to 

                                       Scala, "Hello World" """

但是这样输出的结果是:

Welcome to 

                                       Scala, "Hello World" 

非常忠实的把字符串输出了,这种时候我们可能需要左对齐,可以使用|进行对其,例如:

val stringSample = """|Welcome to 

                                       |Scala, "Hello World" """

在使用的时候就会输出:

Welcome to 

Scala, "Hello World" 

====操作符======================================

在Java中,操作符是不能重载的,因此大家需要编写很多看上去很丑的函数来实现操作符的效果,在Scala中,所有的函数都可以像操作符一样使用,例如 +,-

以及之前介绍的for循环中的to和until。

因为Scala中调用单参数的方法可以不写括号,调用成员函数可以不写. 所以看上去就像是操作符一样,例如:

[java] view plaincopy
  1. class A(X : Int){  
  2.    def add(y :Int) = new (X + y)  
  3. }  

这里的类的定义似乎和标准的类定义不一样,有一个函数,其实这只是一种简写的方法,他的作用是增加一个名为X的字段,并在构造函数中为其赋值,类似于:

[java] view plaincopy
  1. class A{  
  2.    var X = 0  
  3.    def A(x : Int) { X = x }  
  4.    def add(y :Int) = new (X + y)  
  5. }  

这只能说是类似,因为第二种定义中的X是可变的,而第一种方法中X是val类型的。


这样就可以在A的成员中使用方法add了,例如,a1变量是A类型,则:

val a3 = a1.add(5)

但这不是我们想要的效果不是,根据Scala的规则,我们可以省略 add 和 . 则,最后变成了:

val a3 = a1 add 5

嗯,看上去舒服多了,但是用add总觉得还是不是很舒服不是,我们把函数名换为 + 就好了:

[java] view plaincopy
  1. class A(X : Int){  
  2.    def +(y :Int) = new (X + y)  
  3. }  

然后就可以这样使用了:

val a3 = a1 + 5

嗯,好看多了不是,其实这句话是编译成: val a3 = (a1).+(5)

只是我们省略了其中的一些括号和.

有人这时候就会想,如果我把参数调过来会怎么样呢:

val a3 = 5 + a1

这种时候就会报错了,因为在Int类型中,找不到 +(A)的方法,这种时候我们可以使用Scala的隐式转换,在你需要起作用的范围内增加一个函数定义:

inplicit def  intToA(X:Int) = new A(x)

则,在使用

val a3 = 5 + a1 就可以了

需要注意的是,隐式转换可以带来很多的方便,但也会扰乱我们代码的可读性,所以怎么使用需要自己把握了。


数学运算及逻辑操作,

常用的数学运算符与Java中一样,都是+,-,*,/,%

逻辑运算符则包含了 >,<.>=,<=,!

其中需要说明的是!操作符,因为与其他的操作符不太一样,它是前置操作符,例如 !(a == ""), 所以在定义前置操作符的时候,方法名需要以 unary_开头,也就是说以unary_开头的函数可以作为前置函数使用。

例如 : -3,!true

位操作符:&,^,~

对象的相等性

scala中对象相等性的对比与C#更为接近,我们知道Java中的 == 操作符对比的是两个变量的内存位置是否一致,而Scala中则是调用equals方法。

Scala中的内存指针的比较请使用 eq 与 nq 两个方法


下面一节会讲述标准的继承与特质(类似于接口的东西)

0 0
原创粉丝点击