【发布时间】:2016-01-29 20:37:49
【问题描述】:
我有一个类似 val s = "5 - 3 + 2" 的字符串(可以有任意数量的加法/减法)。使用模式匹配我想计算这个表达式(所以这个例子的结果是 4)。 我的第一个想法是做这样的事情:
object calculator{
val s = "5 - 3 + 2"
val Pattern = "(\\d+)".r
def main(args: Array[String]) {
val matches = Pattern.findAllIn(s).toArray
for (mymatch <- matches) mymatch.toInt
var sum = 0
matches.foreach(sum += _)
println(sum)
}
}
它甚至没有假设我可以进行减法(我不知道该怎么做),但是有一个错误:类型不匹配;找到:String#3416175 需要:Int#1078
另一种方法是使用匹配器并以某种方式评估这些表达式:
val Pattern = ((?:\\d+\\s*[-+]\\s+)*\\d+).r
def matcher(expression: String): Any = expression match {
case Pattern(expression) => expression //evaluate expression here?
case _ => "wrong expression"
}
任何想法如何实现这一目标?
【问题讨论】:
-
那里没有计算表达式,这就是我需要的。
标签: regex scala pattern-matching