【发布时间】:2012-11-25 05:55:25
【问题描述】:
如果这个问题是重复的,请原谅我;我找不到任何东西,因为我不知道要搜索的正确单词。因此,使用隐式 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)
如果不专门为(Seq[(String, Int)]) => Int 做一个implicit def,我怎么能做到这一点?
【问题讨论】:
-
您的
p函数不能接受Charset参数,而您在调用它时插入Seq[(String, Int)]值的任何原因? -
@Kane,也许不是,但我认为是。所以上下文是我正在使用 Playframework 的 Scalaforms DSL,我正在尝试使用
seq和tuple将 HTML 表单输入转换为CharsetMap。我想也许我可以写一些类似于seq的东西,它返回一个 Map 而不是 Seq,但我希望我可以用隐式 def 来做到这一点。
标签: scala types implicit-conversion