我有一个函数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)) => 字符串
地图[(字符,字符),字符串](解析器,asString)
我试图明确指定map
as的类型,map[(Char, Char), String](parser, asString)
但这也无济于事。
这里的类型T1
是 char 元组(Char, Char)
并且T2
是String
. 因此,该函数(Char, Char) => String
应该是输入,但 scala 期待不同的类型。
我在这里想念什么?为什么期待((Char, Char)) => String
而不是(Char,Char) => String
?
我正在使用 Scala 2.12。不知道这是否相关。
感谢您的帮助。