[英]Parametric polymorphism in scala
我正在嘗試實現參數多態性以擴展具有使用asInstanceOf[]
進行大小寫匹配的語句的函數。 我需要將參數的類型與項目的另一個接受參數的包中的類匹配。 我已經試過這段代碼:
def abc[A](x: A, i: Int): Any =
{
x(i)
}
在運行時,我收到一條錯誤消息,說A does not take parameters
。 如何將A
與project1.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)
}
基本上,我們在這里所做的是接受具有類型為Int
的apply
方法的任何類型的子類型,即它接受一個Int
參數。
應該注意的是,如果您嘗試將輸入類型從Int
推廣到任意T
,則結構類型會讓您感到悲傷。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.