[转帖]Scala学习笔记(六) - 操作符与字面量_Android, Python及开发编程讨论区_Weblogic技术|Tuxedo技术|中间件技术|Oracle论坛|JAVA论坛|Linux/Unix技术|hadoop论坛_联动北方技术论坛  
网站首页 | 关于我们 | 服务中心 | 经验交流 | 公司荣誉 | 成功案例 | 合作伙伴 | 联系我们 |
联动北方-国内领先的云技术服务提供商
»  游客             当前位置:  论坛首页 »  自由讨论区 »  Android, Python及开发编程讨论区 »
总帖数
1
每页帖数
101/1页1
返回列表
0
发起投票  发起投票 发新帖子
查看: 3218 | 回复: 0   主题: [转帖]Scala学习笔记(六) - 操作符与字面量        下一篇 
jie.liang
注册用户
等级:少校
经验:1003
发帖:77
精华:0
注册:2013-10-11
状态:离线
发送短消息息给jie.liang 加好友    发送短消息息给jie.liang 发消息
发表于: IP:您无权察看 2013-10-22 9:06:54 | [全部帖] [楼主帖] 楼主

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]

  1. class A(X : Int){ 
  2.        def add(y :Int) = new (X + y) 


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

[java]

  1. class A{ 
  2.        var X = 0 
  3.  def A(x : Int) { X = x } 
  4.        def add(y :Int) = new (X + y) 


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

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

val a3 = a1.add(5)


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

val a3 = a1 add 5


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

[java]

  1. class A(X : Int){ 
  2.        def +(y :Int) = new (X + y) 


然后就可以这样使用了:

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)    操作        顶端 
总帖数
1
每页帖数
101/1页1
返回列表
发新帖子
请输入验证码: 点击刷新验证码
您需要登录后才可以回帖 登录 | 注册
技术讨论