使用自定义XML格式解析器,我实现了一个简单的案例类:
case class CustomNode(tree: XmlTree)(implicit val filename: String) { ... }
在另一个调用中,我像这样构造该类的对象:
implicit val filename: String = ...
val tree: XmlTree = ...
val nodes: Seq[CustomNode] =
tree.descendant
.filter(CustomXml.isCustomNode)
.map(CustomNode(_))
这按预期工作正常。
但是,CustomNode(_)
调用看起来很尴尬,因此我将其转换为方法值,即:
val nodes: Seq[CustomNode] =
tree.descendant
.filter(CustomXml.isCustomNode)
.map(CustomNode) // <-- changed
这会导致编译错误:
Error:(23, 12) type mismatch;
found : CustomNode.type
required: XmlTree => ?
.map(CustomNode)
我使用SBT 1.1.1版和Scala 2.12.4版进行构建。
这仅仅是一个表面问题,但是我仍然想知道第二通电话怎么了。
顺便说一句,我的IDE(IntelliJ IDEA)也建议对第一个版本进行此更改,而后一个版本看起来还不错。
关于StackOverflow以及与其他类似问题有关的其他地方有很多问题,但是我找不到遇到此特定问题的任何问题。
答案 0 :(得分:1)
您正在传递伴随对象作为参数。
与所有单例对象一样,其类型为CustomNode.type
。
使用.apply
方法的用户略有不同。
val nodes: Seq[CustomNode] =
tree.descendant
.filter(CustomXml.isCustomNode)
.map(CustomNode.apply)