2

私はこのようなことをしたいと思います:

def run(subjects: List[Subject]) = {
  val configs = compute()
  subjects.map(s => configs.map(c => test(s,c)))
  // or flatMap, I don't really care at this point
}

私のユースケースでは、サブジェクトは実際Subject[T]にはあり、結果にはタイプセーフなバージョンが必要Tです。ので、私は持っています:

def run[L <: HList](subjects: L)(implicit mapper: Mapper[testFun.type, L]) = {
  val configs = compute()
  subjects.map(testFun)
}

ただし、この投稿testFunによると、シングルトン型が必要な構成を渡すことができません。

オプションは次のとおりです。

val cfgHL = HList.fill(subjects.length)(configs)
(subjects zip cfgHL).map(testFun)

しかし、HList現在、手術はありませんfill。ヒントはありますか?

4

1 に答える 1

3

mapConstと同じことを実行するために使用できますfill。次の場合:

val xs = 1 :: 'a :: 'a' :: HNil

私たちは書くことができます:

scala> xs.zip(xs mapConst "x") == (1, "x") :: ('a, "x") :: ('a', "x") :: HNil
res0: Boolean = true

部分的に (高ランクの) ポリモーフィック関数を適用してからそれらをマッピングするという問題に取り組むには、他の方法があることに注意してください。たとえば、私の回答 hereを参照してください。ただし、そのようなものは、ユースケースにとってはやり過ぎになる可能性があります。

于 2013-05-23T22:45:50.220 に答える