0

この質問が重複している場合はご容赦ください。検索する正しい単語がわからないため、何かを見つけるのに苦労しています。したがって、暗黙のdefを使用すると、次のようなことができます。

type CharsetMap = Map[Charset, Byte]

implicit def seqtup2CharsetMap(input: Seq[(String, Int)]): CharsetMap = {
  Map.empty  // placeholder
}

def somef(a: Int, b:Int, p: CharsetMap) = p
somef(1, 3, Seq(("hey", 2), ("there", 9)))

somefこれにより、Seq [(String、Int)]オブジェクトをパラメーターとして呼び出すことができます。問題は私がこのようなものを持っているということです...

def somef2(p: (CharsetMap) => Int) = p

これは機能しません:

val p = (a: Seq[(String, Int)]) => 19
somef2(p)

implicit def特にのために行うことなくこれを行うにはどうすればよい(Seq[(String, Int)]) => Intですか?

4

1 に答える 1

2

A => B一部の関数を からなる関数に暗黙的に変換したいようですC => B。これは、この一般的な暗黙で行うことができます。

implicit def f2InputConverter[A, B, C](f: A => B)(implicit i: C => A): C => B = (c: C) => f(i(c))

範囲内に収まったら、特定のケースでは、質問で定義した関数の逆である暗黙の関数が必要になります。

implicit def charsetMap2Seqtup(input: CharsetMap): Seq[(String, Int)] = {
  Nil  // placeholder
}

そして、あなたはで呼び出すことができるはずsomef2ですp

于 2012-12-07T04:29:25.717 に答える