2015-03-02 62 views
0

好的,我試圖讓我的腦袋纏住Akka演員。 我看着從TestActorRef.scala下面的源代碼,並希望得到的細節保持:Akka演員系統TestActorRef - 試圖理解TestActorRef的含義[T <:Actor]

class TestActorRef[T <: Actor](
    _system: ActorSystem, 
    _props: Props, 
    _supervisor: ActorRef, 
    name: String) 

好了,這是一兩件事,我發現很容易和理解關於Scala的構造函數的概念。這是TestActorRef配備了4參數的構造函數和這些參數是:_SYSTEM:ActorSystem,_props:道具, _supervisor:ActorRef,名稱:字符串 (這是從API也很明顯)

我沒有得到的是'[T <:演員]「的部分
我的廣泛預感是,它與帶有簽名的通用Java類一樣,但要警告Scala是一種更深的語言,
所以,在Java中,我們有一個通用的類定義如下:

class name<t1, T2, ...Tn) { /** */} 

其中T1,T2,T3是類型參數或類型變量。 我又回到了API找到這個類在Java中,這是相當於版本: ,我認爲該宣言是:

public class TestActorRef<T extends Actor> 

所以,我們有:
<T extends Actor> - 在Java中

[T <: Actor] - 在斯卡拉。

Scala版本的含義是什麼?什麼是「<:」運營商或「關鍵字」。 與Java版本有什麼不同?

所有這些都將幫助我實現更好地處理TestActorRef和測試Akka Actor的目標。

回答

1

'T <:Actor'表示任何類型T如果T是Actor的子類型。這與Java中的<T extends Actor>具有相同的含義。在斯卡拉T <: ...被稱爲上限類型。你可以找到準確的定義here

+1

這很好地回答了我的問題。謝謝 – user3825558 2015-03-06 23:49:01