黑猴子的家 Scala 物件不能泛型

2021-09-27 11:03:35 字數 584 閱讀 7198

我們沒法給物件新增型別引數。比如,可變列表。元素型別為t的列表要麼是空的,要麼是乙個頭部型別為t、尾部型別為list[t]的節點

abstract class list[+t]

class node[t](val head:t,val tail:list[t]) extends list[t]

class empty[t] extends list[t]

將empty 定義成類看上去有些傻,因為它沒有狀態。但是,你又無法簡單地將它變成物件:

object empty[t] extends list[t] //錯誤

你不能將引數化的型別新增到物件。 在本例中,我們額解決方法是繼承list[nothing]:

object empty extends list[nothing]

你應該還記得,nothing型別是所有型別的子型別。因此,當我們構造如下單元素列表時,

val list1 = new node(42,empty)

型別檢查是成功的。根據協變的規則,list[nothing] 可以被轉成成list[int],因而node[int]的構造器能被呼叫

黑猴子的家 Scala 函式變種

1 變種1,乙個引數 第一種 乙個引數 def pla1 a1 string unit 2 變種2,兩個引數 第二種 兩個引數 def pla2 a1 string,a2 string unit pla2 a2 hei a1 haha 3 變種3,引數預設值 第三種 引數預設值 def pla3 a...

黑猴子的家 Scala 佇列 Queue

佇列資料訪問,符合先進先出策略 1 佇列的建立 import root scala.collection.mutable import scala.collection.mutable val q1 new mutable.queue int println q1 2 佇列元素的追加 q1 1 pr...

黑猴子的家 Scala 密封類

如果想讓case類的所有子類都必須在申明的該類的相同的檔案中定義,可以將樣例類的通用超類宣告為sealed,叫做密封類,密封就是外部使用者不能在其他檔案中定義子類。不能被繼承只能自己用 sealed abstract class trafficlightcolor case object red e...