import scala.util.parsing.combinator._
object SimpleArith extends JavaTokenParsers {
"abc".map(identity)
生成
类型不匹配; found:String(“abc”)必需:?{def map:?}注意 隐式转换不适用,因为它们是 不明确:两个方法都是对象Predef中的augmentString类型(x: String)scala.collection.immutable.StringOps和方法文字 特性RegexParsers类型(s:String)SimpleArith.Parser [String]是 可能的转换函数从String(“abc”)到?{def map:?}
你是如何解决的?
答案 0 :(得分:1)
我能想到三种方式。首先,您可以调用特定的所需隐式函数(它总是可以显式使用):
augmentString("abc").map(identity)
其次,强制转换为所需类型(这需要您导入scala.collection.immutable.StringOps
,或指定完全限定的类名称):
("abc": StringOps).map(identity)
第三,您可以将.map
或其他字符串操作代码移动到解析器隐含的其他地方的方法中,并调用该方法。例如:
trait StringMappings {
def mapStr(str: String) = str.map(identity)
}
和
import scala.util.parsing.combinator._
object SimpleArith extends JavaTokenParsers with StringMappings {
mapStr("abc")
}
答案 1 :(得分:0)
不是效率最高但是像我这样的任何菜鸟都可以使用toList of char
str.toList.map ...