如何在Scala匹配案例中检查运算符

时间:2015-05-13 16:50:44

标签: scala apache-spark

我发送一个算术运算,如:a + b到我的程序,程序内部我正在读取每个部分并设置param变量,x是我拥有的另一个常量变量和运算符。操作员将被输入args(1)然后根据我的内容我想使用另一个程序执行操作。以下是我解释的程序的一部分:

 if (param != 0){
            args(1) match {
                    case + =>val resRDD=sv.apply(sRDD, x:Float=>x + param)
                    case - =>val resRDD = sv.apply(sRDD, x:Float=>x - param)
                    case * =>val resRDD = sv.apply(sRDD, x:Float=>x * param)
                    case / =>val resRDD = sv.apply(sRDD, x:Float=>x / param)
                    case _ => "error"
            }
    }

我得到以下错误:

 [error]     ')' expected but identifier found.
 [error]           case * =>val resRDD = sv.apply(sRDD, x:Float=>x * param)
 [error]                                                           ^                                                   

当我对这一行进行评论时,我会得到如下所示的所有操作符错误:

[error] case + =>val resRDD=sv.apply(sRDD, x:Float=>x + param)
[error]      ^
[error] case + =>val resRDD=sv.apply(sRDD, x:Float=>x + param)
[error]                                               ^

如果我使用

   case "+" => //whatever

我会收到以下错误:

   [error]  not fount: type +

我不知道我的计划有什么问题!

谢谢!

3 个答案:

答案 0 :(得分:3)

尝试在模式匹配中使用字符串而不是运算符:case "+" =>例如

答案 1 :(得分:1)

你应该将lambda的参数括在括号中:

if (param != 0) {
  args(1) match {
    case "+" => val resRDD = sv.apply(sRDD, (x: Float) => x + param)
    case "-" => val resRDD = sv.apply(sRDD, (x: Float) => x - param)
    case "*" => val resRDD = sv.apply(sRDD, (x: Float) => x * param)
    case "/" => val resRDD = sv.apply(sRDD, (x: Float) => x / param)
    case _ => "error"
  }
}

Here's the official Tour entry on the anonymous function syntax.

顺便说一句,根据Scala Style Guide,最好用2个空格而不是4个空格缩进每个级别。

我建议你阅读Programming in Scala,这是一本开始学习Scala(并进一步推进)的好书。它将涵盖有关语法,风格和最佳实践的所有基本问题 - 您会发现它很有用。

答案 2 :(得分:0)

感谢大家,我能够按照以下方式解决问题:

/test
/test1
/test2