HList
簡単にするために、インスタンスが正確に 2 つの値を保持していると仮定します。
def intToString(x: Int) = x + "_"
def intToDouble(x: Int) = x * 10d
val fns = (intToString _ :: intToDouble _ :: HNil)
今、私はいくつかHlist
のintを持って、これを行うことができるようにしたいと思います:
(fns zip (1 :: 2 :: HList) map {case (f, x) => f(x) }
取得するため
("1_", 10.0)
これからは、自分が何をしているのかわからないと仮定し、関数の神々の前で自分の卑劣さを完全に理解している.
私はすでに shapeless の wiki を見てきましたが、私が理解している限りでは、shapeless で受け入れられるInt
toから関数を作成する必要があります。T
私は正しく理解しましたか?これが私が得たものです:
object mapApply extends Poly1 {
implicit def default[T] = at[Function[Int,T]](f => f.apply _)
}
この時点で、私は完全に道に迷っており、先に進む方法さえわかりません。でも、これがもたらす潜在的な力と表現力にちょっと魅了されているので、この機能がどのように機能するかを本当に理解したいと思っています. あなたの答えが単なるコードスニペットではなく、よりオープンで説明的なものになることを本当に感謝しています.
c++
PS SO のエンジンがタグを提案してくれました。私は何か C++ っぽいことを言いましたか?