Scala初學的幾個疑惑

2021-07-03 23:49:51 字數 2348 閱讀 3777

以scala的bigint為例,呼叫

val v=bigint("12321")

實際呼叫**是

另外乙個例子寫的很好就直接拿來用了

packagecom.robin.study

/*** created by robinmac on 15-7-22.

*/classdefvalv3 = bigint

("123121");

}def}

deftest

}objectvarstaticvalue=1;

defcompanion=println("i'm a companion");

defstat

defnew}

varcount

= 0defincc =

}object//類名後面跟方法名,呼叫的是伴生物件的方法

println("

\n\n

println("

\n\n

vala

//類的例項後面跟方法名,呼叫的時類中定義的方法

println("

\n\n

calling code: a.test")

a.test

println("

\n\n

calling code: println(a())")

println(a

()) println("

\n\n

valb

println("b is :"+b

) println("b.test is :"+b

.test)

println("a is :"+a

//半生物件的方法呼叫類似於類的靜態方法呼叫

for(i <- 0 until 10)

//半生物件的屬性呼叫相當於類的屬性方法呼叫

)}

這個例子也很好的說明了伴生物件的用法。因為在scala中沒有靜態方法,因此預設試用class同名的object中儲存靜態方法以及靜態變數,並在類中進行使用。

根據個人當前理解,這應該僅僅是乙個約定俗成,且這個同名物件被稱為類的伴生物件。

classxiahx 

objectxiahxextendsvalm

=newxiahx();

valtwopt

=m.twop(1

,_:int);

valtwop33

=m.twop2

(1) println(twopt

(1))

println(m

.cc(1)(2))

println(m

.twop2

(1)(2))

println(twop33

(4))

println(m

.add5

(3));

}

下劃線可以理解為:對任意函式a,如果其某個輸入k

引數為下劃線,則其返回乙個新的函式,新的函式的輸入為k同型別變數,輸出為a的輸出。

其他很多東西都是這個定義的變形,但大多數都符合該規律。

例如上例子中定義了add,輸入兩個int型別引數

defadd(x:int,y:int)=x+y

valadd3

=add(3

,_:int)

而後使add3成為add(3,_:int)的結果,該函式實際返回的並不是x+y的值,顯然此時只有x被賦值為3,y被下劃線_替代了。所以其返回的是乙個新的函式,該函式可認為是:

defadd3(y:int)=3

+y

Remoting的幾個疑惑

寫完 關於remoting 之後,算是把這幾天學習remoting的思路理了一下。remoting的基本知識是很簡單的,但一旦深入,就會發現博大精深。昨天看到微軟社群的一貼廣告,說台灣的某個mvp寫了一本書,是專門講iis的安全知識的。於是想到,如果要把微軟產品的每一項功能去窮盡,可能每個看似很小的...

scala疑惑 一 ListSet新增元素

object test extends logging 這裡的 a 4呼叫了 scala.collection.immutable.listset.node this method creates a new set with an additional element.override def e...

關於ARP欺騙實驗的幾個疑惑點

上次寫了篇文章,說了關於arp欺騙後擷取內網流量的實驗。經後來反覆驗證,發現實際成功率很低,而且對於手機端似乎還並不怎麼起作用。這讓我很是疑惑,於是今天又針對drifnet進行了一點探索。探索發現了以下幾點 1 在進行了arp欺騙之後,我的電腦並不能擷取到我手機的,但是我的手機卻實實在在地已經被ar...