2
형태가없는 스프레이 라이브러리를 연구하는 동안 많은 내부 Aux 유형, 특성, 객체 및 클래스를 보아 왔습니다. 기존 내부 API를 보강하는 데 사용된다는 것을 이해하는 것은 어렵지 않습니다. 공장 및 도우미 메소드의 "동반 객체 패턴"과 매우 유사합니다. HList 소스의 예 :가 편리 구성원으로 인코딩 된 길이를 가지고 있기 때문에 예를 들어 Length
의 경우형태가없는 Aux 클래스 뒤에있는 패턴
trait Length[-L <: HList] {
type Out <: Nat
def apply() : Out
}
trait LengthAux[-L <: HList, N <: Nat] {
def apply() : N
}
object Length {
implicit def length[L <: HList, N <: Nat](implicit length : LengthAux[L, N]) = new Length[L] {
type Out = N
def apply() = length()
}
}
object LengthAux {
import Nat._
implicit def hnilLength = new LengthAux[HNil, _0] {
def apply() = _0
}
implicit def hlistLength[H, T <: HList, N <: Nat](implicit lt : LengthAux[T, N], sn : Succ[N]) = new LengthAux[H :: T, Succ[N]] {
def apply() = sn
}
}
왜 유형 멤버를 기반으로 암시 적 검색을 수행 할 수 없다고합니까? (https://gist.github.com/travisbrown/5721465)? –
죄송하지만, 고맙습니다. – stew