考慮一個可能有大量成員的案例類;以示出的情況下承擔兩個參數,如在來自數組的斯卡拉案例類參數實例化
case class C(s1: String, s2: String)
,並因此假設與至少許多參數大小的陣列,
val a = Array("a1", "a2")
然後
scala> C(a(0), a(1))
res9: C = c(a1,a2)
然而,是否有一種案例類實例化的方法,其中不需要爲數組中的每個元素引用任何(可能很多)預定義的類成員?
考慮一個可能有大量成員的案例類;以示出的情況下承擔兩個參數,如在來自數組的斯卡拉案例類參數實例化
case class C(s1: String, s2: String)
,並因此假設與至少許多參數大小的陣列,
val a = Array("a1", "a2")
然後
scala> C(a(0), a(1))
res9: C = c(a1,a2)
然而,是否有一種案例類實例化的方法,其中不需要爲數組中的每個元素引用任何(可能很多)預定義的類成員?
具有不同於其他答案收集點點滴滴,使用Shapeless 2.0.0因此,如下的解決方案,
import shapeless._
import HList._
import syntax.std.traversable._
val a = List("a1", 2) // List[Any]
val aa = a.toHList[String::Int::HNil]
val aaa = aa.get.tupled // (String, Int)
然後我們就可以實例化一個給定的情況下,類
case class C(val s1: String, val i2: Int)
val ins = C.tupled(aaa)
等
scala> ins.s1
res10: String = a1
scala> ins.i2
res11: Int = 2
型號簽名在編譯時已知與案例類成員要實例化的類型一樣多。
不,你不能。你不能保證你的數組大小至少是你的案例類的成員數。
儘管你可以使用元組。
假設你有提到過的案例類和看起來像這樣一個元組:
val t = ("a1", "a2")
然後,你可以這樣做:
c.tupled(t)
要一個序列轉換成一個元組看到這樣的回答:https://stackoverflow.com/a/14727987/2483228
一旦你有一個元組serejja的答案會讓你到c
。
請注意,約定會讓我們拼寫c
,首字母爲C
。
許多感謝,有用的信息。 – elm
請注意遵循所有答案的解決方案。 – elm
這應該是被接受的答案。除了問題作者是接受自己答案的同一個人之外,不知道爲什麼上面的答案是被接受的答案,而不是這個答案。顯然,OP對依賴Shapeless庫的答案感興趣,但Shapeless在OP中沒有提及,它只出現在標籤中。更重要的是,正如這個答案所示,無形是沒有必要的。 – doug