我是斯卡拉新手,我無法真正發現關於type
關鍵字的很多內容。我想了解下面的表達式可能意味着:瞭解'類型'關鍵字在Scala中的作用
type FunctorType = (LocalDate, HolidayCalendar, Int, Boolean) => LocalDate
FunctorType
是某種形式的別名,但到底是什麼它意味着什麼?
我是斯卡拉新手,我無法真正發現關於type
關鍵字的很多內容。我想了解下面的表達式可能意味着:瞭解'類型'關鍵字在Scala中的作用
type FunctorType = (LocalDate, HolidayCalendar, Int, Boolean) => LocalDate
FunctorType
是某種形式的別名,但到底是什麼它意味着什麼?
是的,類型別名FunctorType
僅僅是
(LocalDate, HolidayCalendar, Int, Boolean) => LocalDate
類型別名常常被用來保持代碼的簡潔其餘的簡寫:你現在可以寫
def doSomeThing(f: FunctorType)
這將被編譯器解釋爲
def doSomeThing(f: (LocalDate, HolidayCalendar, Int, Boolean) => LocalDate)
這有助於避免定義許多隻是元組或其他類型定義的自定義類型,例如。
還有其他一些有趣的使用案例type
,例如在this chapter斯卡拉描述編程。
實際上,Scala中的type
關鍵字可以做的不僅僅是將一個複雜的類型別名爲一個更短的名稱。它引入了類型成員。
如你所知,一個類可以有字段成員和方法成員。那麼,Scala還允許一個類擁有類型成員。
在您的具體情況下,type
實際上是引入了一個別名,允許您編寫更簡潔的代碼。類型系統只是在執行類型檢查時用實際類型替換別名。
但你也可以有這樣的事情
trait Base {
type T
def method: T
}
class Implementation extends Base {
type T = Int
def method: T = 42
}
像一類的其他成員,類型成員也可以是抽象的(你不指定什麼他們的價值實際上是),並可以覆蓋在實現中。
類型成員可以看作泛型的雙重性,因爲您可以用泛型實現的大部分內容都可以轉換爲抽象類型成員。
所以是的,它們可以用於別名,但不要將它們限制在這個位置,因爲它們是Scala類型系統的一個強大功能。
請詳見本出色答卷:
只是一個例子來看看如何使用 「類型」 爲別名:
type Action =() => Unit
上述定義將Action定義爲採用空參數列表並返回Unit的過程類型(方法)的別名。
請務必記住,在類中使用類型將創建類型成員而不是別名。因此,如果您只需要一個類型別名,請在伴隨對象中定義它。 –