如果这个问题是重复的,请原谅我;我找不到任何东西,因为我不知道要搜索的正确单词。因此,使用隐式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)))
允许我使用Seq [(String,Int)]对象作为参数调用somef
。问题是我有这样的事情......
def somef2(p: (CharsetMap) => Int) = p
这不起作用:
val p = (a: Seq[(String, Int)]) => 19
somef2(p)
如果不专门为implicit def
执行(Seq[(String, Int)]) => Int
,我该怎么做呢?
答案 0 :(得分: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