在使用 Scala 的组合器解析框架时,我在解析浮点数时遇到了以下问题:
import scala.util.parsing.combinator.JavaTokenParsers
import org.junit.runner.RunWith
import org.scalatest.FlatSpec
import org.scalatest.junit.ShouldMatchersForJUnit
import org.scalatest.junit.JUnitRunner
@RunWith(classOf[JUnitRunner])
class SandboxSpec extends FlatSpec with ShouldMatchersForJUnit {
"A java token parser" should "parse a float" in {
class Parser extends JavaTokenParsers {
def realValue: Parser[Float] = floatingPointNumber ^^ {
s => s.toFloat
}
}
val p = new Parser()
val result = p.parseAll(p.realValue, "5.4") match {
case p.Success(x, _) => x
case p.Failure(msg, _) => fail(msg)
}
result should equal (5.4f plusOrMinus 0.0001f)
}
}
此测试产生以下错误:
5.4 did not equal FloatTolerance(5.4,1.0E-4)
我不确定它是否是解析器代码产生的不是类似浮点的东西(不过,用调试器查看它,它显然是一个 Java 浮点),或者它是否是 ScalaTest 匹配器的问题。
有什么想法吗?