^^在细化字符串时意味着什么?

时间:2015-07-15 19:09:03

标签: scala playframework

尝试将String解析为使用“^^”的Object的解析器。例如,以下解析器将playframework中的message.en行解析为Message对象:

val message = ignoreWhiteSpace ~ messageKey ~ (ignoreWhiteSpace ~ "=" ~ ignoreWhiteSpace) ~ messagePattern ^^ {
    case (_ ~ k ~ _ ~ v) => Message(k, v.trim)
  }

上述代码中^^的含义是什么?

1 个答案:

答案 0 :(得分:4)

这是在scala.util.parsing.combinator.Parsers.Parser类型上定义的方法。它的签名是def ^^[U](f: T => U): Parser[U](在Parser[T]的实例上定义。)

如果我们有p类型的解析器Parser[T]和类型为f的函数T => U,则执行p ^^ f表示“运行解析器p,如果我们可以用p成功解析,然后使用f将解析后的结果转换为U类型。“如果使用p进行解析失败,那么我们永远不会调用f

[具体答案] 所以...在上面的代码中,如果解析器ignoreWhiteSpace ~ messageKey ~ (ignoreWhiteSpace ~ "=" ~ ignoreWhiteSpace) ~ messagePattern成功,那么我们将把结果转换为Message类型! { case (_ ~ k ~ _ ~ v) => Message(k, v.trim) }是此处的函数(如果您愿意,我们的f)。

希望这清除它!

PS - 这是doc

相关问题