3
params가없는 메소드가 있다고 가정합니다. 유형 매개 변수의 길이는 어떻게 결정합니까?NList의 HList 유형 paremeter의 길이
def func[T <: HList]: Nat = {
// some magic
}
params가없는 메소드가 있다고 가정합니다. 유형 매개 변수의 길이는 어떻게 결정합니까?NList의 HList 유형 paremeter의 길이
def func[T <: HList]: Nat = {
// some magic
}
당신은 HList
의 Nat
길이를 계산하는 ops.hlist.Length
작업을 사용할 수 있습니다.
또한 불투명으로 설정하면 Nat
은 실용적인 숫자에 대한 모든 유형 수준 정보를 잃어 버리기 때문에별로 유용하지 않습니다. 그래서 당신은 함수에서 정확한 Nat
유형을 얻을 수 있습니다
import shapeless._
import shapeless.ops.hlist.Length
def func[T <: HList](implicit len: Length[T]): len.Out = len()
사용법 : Int
가 더 까다 보인다
scala> natLen[Int :: String :: HNil]
res1: shapeless.Succ[shapeless.Succ[shapeless._0]] = Succ()
이 길이를 얻기. (물론, 그것은 새를 작성하는 것도 가능 내가
HKernel
을 사용하여 다음과 같은 해결 방법을 발견했습니다
def uselessIntLen[T <: HList, N <: Nat](implicit
len: Length.Aux[T, N],
toInt: ToInt[N]
): Int = toInt()
: 그것이 N <: Nat
유형 매개 변수를 필요로 기본적으로 쓸모 만들 것 때문에, ops.nat.ToInt
을 사용할 수 없습니다 보인다 수동으로 IntLength
을 typeclass하십시오). 어쩌면 누군가가 더 직접적인 내장 된 방법으로 도움이 될 수 있습니다
import shapeless.ops.hlist.HKernelAux
def intLen[T <: HList](implicit ker: HKernelAux[T]): Int = ker().length
사용법 :
scala> intLen[Int :: String :: HNil]
res2: Int = 2
Whaaaaat을 ........? paramemter 형의''lenght ''이란 무엇을 의미합니까? –