【发布时间】:2018-07-20 07:00:46
【问题描述】:
我有一个函数map,它接受一个Parser 和一个定义如下的函数:
def map[T1, T2](parser: Parser[T1], func: T1 => T2): Parser[T2]
我创建了一个 Parser 类型的 [(Char, Char)] 对象和一个函数 (Char, Char) => String。
val parser[(Char,Char)] = //...
val asString: (Char, Char) => String = (a: Char, b: Char) => a.toString + b.toString
然后我将这两个传递给map 函数。
val mParser: Parser[String] = map(parser, asString)
我希望一切正常,但我收到asString 参数的类型不匹配错误
错误:(26, 41) 类型不匹配;
找到 : (Char, Char) => 字符串
必需:((Char, Char)) => 字符串
map[(Char, Char), String](parser, asString)
我尝试将map 的类型明确指定为map[(Char, Char), String](parser, asString),但这也无济于事。
这里的T1 类型是字符元组(Char, Char),T2 是String。因此,函数 (Char, Char) => String 应该是输入,但 scala 期待不同的类型。
我在这里缺少什么?为什么它期待((Char, Char)) => String 而不是(Char,Char) => String?
我使用的是 Scala 2.12。不知道这是否相关。
感谢您的帮助。
【问题讨论】:
-
你可以试试
map(parser -> asString)吗? Here您可以获取更多关于地图的信息。 -
那是什么?我没有使用哈希图。我说的是我定义的
map函数。 -
对不起,我错过了
标签: scala generics types tuples scala-generics