2014-03-19 68 views
1

我想初始化一個案例類,或從值的向量初始化普通類。初始化案例類從Vector

示例代碼我現在看起來是這樣的:

class P(parameters : Vector[String]) { 
    val a: String = parameters(0) 
    val b: String = parameters(1) 
    val c: String = parameters(2) 
} 

我初始化這個與

P(Vector[String]("1", "2", "3")) 

,但它會更好,如果我能做到有一個案例類:

case class P (a: String, b: String, c: String) 

並且仍然能夠用給定的矢量初始化它 - 不是必須通過構造函數來初始化它。另外,我想支持Vector中元素數量少於要創建的對象的情況:

P(Vector[String]("1")) 

我正在尋找這樣做的Scala方法。

回答

1

您可以在您的案件類中定義一個額外的構造函數:

case class P(a: String, b: String, c: String) { 
    def this(parameters: Vector[String]) = 
    this(parameters(0), parameters(1), parameters(2)) 
} 

如果調用此方法,包含少於三個元素Vector應該發生什麼?

+0

這將是罰款只有3個參數,但我需要和他們一樣的20 :) –

+0

好了,你爲什麼不解釋說,你的問題? – Jesper

+2

@MarcinCylke在這種情況下,無恥可能有助於案例類:https://github.com/milessabin/shapeless/wiki/Feature-overview:-shapeless-2.0.0#generic-representation-of-sealed-families-of-您只需將案例類轉換爲HList即可。 –

1

我瞭解你正在尋找的東西是這樣的:

case class P (a: String, b: String, c: String) 
object P { 
    def apply(v: Vector[String]): P = { 
    //your code to create P, probably 
    P(v(0), v(1), v(2)) 
    } 
}