Scala 操作符與提取器

2022-04-09 13:46:28 字數 2010 閱讀 4936

實際上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...