以下是可能用Scala:Scala的構造抽象
scala> val l = List
l: scala.collection.immutable.List.type = [email protected]
scala> l (1, 2, 3)
res0: List[Int] = List(1, 2, 3)
換句話說,Scala有高階的多態性。我想用高階多態來完成以下工作。
sealed abstract class A { def eval() : A }
case class A0() extends A { ... }
case class A1 (a : A) extends A { ... }
case class A2 (a : A, b : A) extends A { ... }
....
所以我有一堆case類的A
,其子類的構造函數不一定採取的參數相同的數字。我也想有一個「通用」案例類,像這樣:
case class ApplyA (c : ???, l : List [ A ]) extends A {
def eval() : A = { ??? } }
的想法是,ApplyA
需要作爲第一個參數的構造函數的東西,這是A
一個亞型,和參數列表。然後eval
方法在可能的情況下用構造函數構造適當的類(即列表具有正確的長度)並返回 (這對應於上述List
示例中的l (1, 2, 3)
)。 ApplyA
的第一個構造函數的參數類型是什麼?
這應該是可能的更高階多態性,但我不知道如何。我知道我可以做到這一點,即使不使用更高階的多態性,只需將構造函數包裝在函數中,然後將這些函數作爲第一個參數傳遞給ApplyA
的構造函數,但我想了解如何直接使用更高階多態。