Scala程式設計 下界介紹與例項分析

2021-10-23 10:49:58 字數 2136 閱讀 2989

話不多說,直接談下界的理解。首先定義了乙個方法:

defbiophoy

[t >: animal](things:seq[t]) = things

其中,t >: animal 表示型別t 應為animal的父類,animal為下界(類),這裡稱之為a類吧。             

在實際使用時,會發現,其實t為animal的子類或無關類都無所謂,都能使用biophoy方法,把自己的物件放進去。那麼,下界到底起了什麼作用呢?本人理解如下:

定義了下界,就是限定可以呼叫的方法範圍(可使用的方法數量),可呼叫的方法是:

1、t與下界類a有繼承關係時,

<1> 傳入類t是下界類a的同類或父類,方法範圍是傳入類t+下界類a的方法交集+傳入類t自身及其父類的方法;

<2> 傳入類t是下界類a的子類,方法範圍是下界類及其以上父類的所有方法。

而呼叫方法的實現,則一定是呼叫層級關係最近的那個方法實現。即:self.function (自己)> direct-parent.function (父親)> grandpa.function (爺爺)

2、沒有繼承關係的,即傳入類t與下界類a無關。則自定義方法(biophoy)可呼叫的方法範圍是object(他們都屬於object)。

示例**:

def foo(x : array[string]) = x.foldleft("")((a,b) => a + b)

def main(args : array[string])

def biophoy[t >: animal](things:seq[t]) = things

class earth

def cry(): unit =

} class animal extends earth

def roar() =

} class bird extends animal

def laugh(): unit =

}}由上述**

不難發現

(如果你親自敲一下**),在任何使用

def biophoy[t >: animal](things:seq[t]) = things

定義的函式時,

都無法找到下界以下類所定義的方法

,但可以找到傳入類t與下界類a的交集方法,及其父類包含的方法。例如:bird實現了laugh方法,但由於下界類及其父類earth類均未定義laugh方法。因此,在biophoy(seq(new bird)).map(_.laugh)會報錯,因為無法找到laugh方法。但如果子未實現該方法,它就會自動呼叫父類的該方法。例如:bird調了自己未有的cry方法,最終呼叫的是父類earth實現的方法。這是因為animal沒有定義cry方法的實現;如果animal有定義cry,那就是呼叫animal的cry方法實現。又例如:bird調了其父類或爺爺類具有的sound方法。那麼,首先sound方法允許被呼叫(即可以被_.找到sound方法)。另外,

呼叫的一定是層級關係最近的實現

,即呼叫bird類自己實現的sound方法。從執行結果可知,上述描述均得以驗證。

下界類主要是結合繼承關係,來限定可呼叫方法的。這裡再舉例說明下:

當傳入類t是下界類a的父親時,即t=earth類,可呼叫的方法範圍是:。注意,下界類a的roar就不能被呼叫;

當傳入類t是下界類a的子類時,即t=birth類,可呼叫的方法範圍是:,注意,子類bird的獨有的方法laugh是不可呼叫。

當傳入類t是下界類的無關類,即兩個類毫無繼承關係時,那麼,

biophoy方法則均視為

object類。各種方法,都無法呼叫。這其實應該就不是scala語言設計者的初衷。所以,t雖然可以把物件放入定義了下界類的方法(

biophoy

),但毫無意義。因此,t就應該放入下界類的父類。從而使得,自定義方法(

biophoy

)中的物件,都具有可知(清晰)範圍的方法被使用。

Scala介紹與環境配置

scala程式語言 1 語言基礎 2 物件導向 3 重點 函式式程式設計 和 高階特性 泛型 隱式類 隱式函式 隱式引數 官網 一 scala語言簡介 1 scala是乙個多正規化的程式語言 支援多種方式的程式設計 1 使用物件導向程式設計 封裝 繼承 多型 2 使用函式式程式設計 scala最大的...

MockCpp介紹與應用例項

幾個相關概念 mockcpp的特點unexpected invocation the invocation cannot be found in allowed invoking list.invoked add int 0x1 1,int 0x2 2 allowed method add stub...

scala 程式設計 其三 對映與元組

關於對映的說明 1,陣列,集合,元組,對映等預設都是不可變的 需要引入可變的包!2,map 採用的是類繼承的方式來進行實現可變與不可變的 3,map 是乙個不可變的鍵值庫,鍵和值都可以型別引數化package day01 object test5 關於元組的說明 1,元組是一種容器,元組是不可變的,...