簡體   English   中英

Scala中的參數多態性

[英]Parametric polymorphism in scala

我正在嘗試實現參數多態性以擴展具有使用asInstanceOf[]進行大小寫匹配的語句的函數。 我需要將參數的類型與項目的另一個接受參數的包中的類匹配。 我已經試過這段代碼:

def abc[A](x: A, i: Int): Any =
{
    x(i)
}

在運行時,我收到一條錯誤消息,說A does not take parameters 如何將Aproject1.package1文件夾中的幾個類匹配? 這些類類似於數組/向量,並且x(i)返回第i個元素。 每個類采用不同的數據類型(例如Int,Double,String等)。

如果這些類接受參數,則它們可能Function1子類型。 不幸的是,並非全部

所以你可以這樣寫:

def abc[A <: Function1[Int, _]](x: A, i: Int): Any = {
    x(i)
}

但這不適用於所有帶有參數的對象,例如案例類隨行對象。 因此,為了解決這個問題,可以使用結構類型。 就像是:

 def abc[A <: {def apply(i: Int): Any } ](x: A, i: Int): Any = {
    x(i)
}

基本上,我們在這里所做的是接受具有類型為Intapply方法的任何類型的子類型,即它接受一個Int參數。

應該注意的是,如果您嘗試將輸入類型從Int推廣到任意T ,則結構類型會讓您感到悲傷。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM