学习更多相关知识,关注博主知乎账号,用户名Trustintruth https://www.zhihu.com/people/suo-yi-xin-90/activities
Scala追求的是纯粹的面向对象,不推荐不属于面向对象的基本类型及其操作符。Scala为了实现这些基本类型,实际在Scala标准库里定义了“class Byte”、“class Short”、“class Char”、“class Int”、“class Long”、“class Float”、“class Double”、“class Boolean” 和“class Unit”九中值类,这些类都是抽象的,不可继承的,所以不能通过 new Int来构造一个Int对象,也不能编写他的子类,他们的对象都是由字面量来表示。
与基本类型相关的操作符其实并不存在这方面概念,所谓的操作符,例如加减乘除等,都是定义在“class Int”等类里的成员方法
例如,Int类定义了一个名为“+”的方法,那么表达式“1 + 2”的真正形式应该是“1.+(2)”。它的释义是:Int对象“1”调用了它的成员方法“+”,并把Int对象“2”当作参数传递给了该方法,最后这个方法会返回一个新的Int对象“3”。
推而广之,“操作符即方法”的概念不仅仅限于九种值类的操作符,Scala里任何类定义的成员方法都是操作符,而且方法调用都能写成操作符的形式:去掉句点符号,并且方法参数只有一个时可以省略圆括号。例如:
scala> class Students3(val name: String, var score: Int) {
| def exam(s: Int) = score = s
| def friends(n: String, s: Int) = println("My friend " + n + " gets " + s + ".")
| override def toString = name + "'s score is " + score + "."
| }
defined class Students3
scala> val stu3 = new Students3("Alice", 80)
stu3: Students3 = Alice's score is 80.
scala> stu3 exam 100
scala> stu3.score
res0: Int = 100
scala> stu3 friends ("Bob", 70)
My friend Bob gets 70.
————————————————
版权声明:本文为CSDN博主「_iChthyosaur」的原创文章,遵循CC 4.0 by-sa版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/qq_34291505/article/details/86763437
前缀操作符是写在操作数前面的操作符,并且操作数只有一个,操作数是调用该方法的对象。前缀操作符只有四个:“+”“-”“!”“~”对象 分别是“unary_+”、“unary_-”、“unary_!”和“unary_~”。如果自定义的方法名是 “unary_”
中缀操作符的左右两边都接收操作数,它对应普通的有参方法。两个操作数中的一个是调用该方法的对象,一个是传入该方法的参数,参数那一边没有数量限制,只是多个参数需要放在圆括号里。Scala规定,以冒号“ : ”结尾的操作符,其右操作数是调用该方法的对象,其余操作符都是把左操作数当调用该方法的对象。