0
我想知道給定的case class
中是否存在特定的類成員。避免具有無形替代的結構類型
以下確實給了我答案,在編譯時失敗是正確的。 (信貸特拉維斯布朗)
scala> def getIntId[A, R <: HList](a: A)(implicit
| gen: LabelledGeneric.Aux[A, R],
| sel: Selector.Aux[R, Witness.`'id`.T, Int]
|): Int = sel(gen.to(a))
case class Foo(id: String)
case class Bar(id: Int, name: String)
scala> getIntId(Bar(123, "bar"))
res3: Int = 123
scala> getIntId(Foo("12345"))
<console>:15: error: could not find implicit value for parameter sel: shapeless.ops.record.Selector.Aux[R,Symbol with shapeless.tag.Tagged[String("id")],Int]
getIntId(Foo("12345"))
現在,如果我沒有一個具體的類型,但是T
通入getIntId
方法,有沒有辦法讓這個與泛型類型T
工作?
更新 說有一個名爲findIdFromType
方法如所描述的,其取入T
型(其中T
總是會有一些case class
)所示。是否有可能做到這一點?
def findIdFromType[T](t:T) = {
getIntId(t) //as expected doesn't compile
}
我不確定我明白你的意思,你能提供一個用例作爲例子嗎? –
@ GabrielePetronella:我剛剛更新了問題(更新部分)。讓我知道是否需要進一步擴展它?謝謝。 –