實際上scala沒有操作符, 只是以操作符的格式使用方法.
操作符的優先順序取決於第乙個字元(除了賦值操作符), 而結合性取決於最後乙個字元
scala的操作符命名更加靈活:)
a 操作符 b
上述操作符
代表乙個帶有兩個引數的方法(乙個隱式引數和乙個顯示引數)
1 to 10 即 1.to(10) range
1 -> 10 即 1.->(10) 對偶操作符(1, 10)
在自己的類中定義操作符很簡單, 以你自己想要做操作符的識別符號來定義乙個方法就好了.
class myoperator(factor1: int)
override def tostring: string = " " + factor1
} val multi = new myoperator(4)
println(multi.&@(2))
}/*output
8*/
後置操作符: 操作符出現在引數之後
a 操作符
1 tostring 即 1.tostring()
前置操作符: 出現在引數之前
+, -, !, ~ 可以作為前置操作符, 它們被轉化為名為 unary_ 的操作符的方法呼叫
如-a
, 即a.unary_-
形式為
a 操作符= b 即, a = a 操作符 b
如 a += b 即: a = a + b
技術細節注意一下:
由於scala可以任意定義操作符, 他需要一套優先順序判定方案;
對所有的操作符生效, 同時保留人們熟悉的標準操作符的優先順序
除了賦值操作符之外, 優先順序由操作符的首字元
決定, 比方說操作符以*
開頭優先順序高於+
開頭的;
以下是操作符的首字元的優先順序, 從上到下, 優先順序依次降低
首字元優先順序
當有一系列的相同優先順序的操作符時,操作符的結合性決定了它們從左到右求值還是從右到左求值.
在scala中操作符都是左結合的, 除了:
右結合的二元操作符是第二個引數的函式
2 :: nil 即 nil.::(2)
f(arg1, arg2, ...)
f.update(arg1, arg2, ..., value)
val me = "wang bin"
val name(first, last) = me
println(first + " " + last)
println(first)
val pos = input.indexof(" ")
if (pos == -1) none
else some((input.substring(0, pos), input.substring(pos + 1)))}}
val number(digit) = "1111 "
println(digit)
try catch
}} println(nameres("wang bin"))
println(nameres("tom hanks ming"))
def nameres(name: string) = name match
}/*output
bintom
*/
val name = "tom li hi"
println(nameseq("tom hanks ming toylor")) // 輸出 ming
def nameseq(name: string) = name match
if (input.trim == "") none else some(input.split("\\s+"))}}
scala 操作符 熟悉
如果想在變數名,類名等定義中使用關鍵字 比如val int,double 這樣的系統關鍵字 可以配合兩個反引號實現,引用時候也要帶引號 中置操作符 a 操作符 b 等價於 a 操作符 b 但 1 nil 等價於 nil.1 後置操作符 a 操作符 等同於 a.操作符,如果操作符定義的時候不帶 呼叫時...
SCALA中簡單操作符
list集合 準備資料 var list1 list 1,2,3 var list2 list 4,5,6 操作符 會將 前的元素做為 後的元素中的第乙個元素進行儲存 println list1 list2 list list 1,2,3 4,5,6 println 2 list1 list 2,1...
scala學習筆記 操作符
中置操作符 二元操作符 操作符位於兩個引數之間。操作符包括字母,比如to,也可以包括操作符字元,比如1 10,等同於方法呼叫1.10 a 識別符號 b 其中的識別符號是乙個帶有兩個引數的方法 乙個隱式引數和乙個顯式引數 例如 1 to 10,實際上是乙個方法呼叫1.to 10 class fract...