如何在Scala脚本中使用过滤器功能

时间:2016-05-06 06:38:09

标签: scala scala-script

作为我学习的一部分,我正在尝试将Scala表达式写入scala脚本,但遇到错误。

我在Scala REPL中成功执行的scala代码是

def intList = List[1,2,3,4,5]
intList.filter(x => x%2 ==1).map(x => x * x).reduce((x,y) => x+y)

这成功执行,以下是我得到的结果。

scala> intList.filter(x => x % 2 == 1).map(x => x * x).reduce((x,y) => x + y)
res15: Int = 35

我正在尝试将其作为Scala脚本或类,以便根据需要重新运行任意次数。我将其保存在名为 SumOfSquaresOfOdd.scala

的文件中
import scala.collection.immutable.List

object SumOfSquaresOfOdd extends App
{
    def main(args:Array[String]):Unit =
    {
            var intList = List[Integer](1,2,3,4,5,6,7,8,9,10)
            def sum = intList.filter(x => x % 2 ==1).map(x => x * x).reduce((x+y) => x + y)
            println sum
    }
}

当我使用scalac编译它时,控制台上会打印以下错误。

λ scalac SumOfSquaresOfOdd.scala
SumOfSquaresOfOdd.scala:8: error: not a legal formal parameter.
Note: Tuples cannot be directly destructured in method or function parameters.
  Either create a single parameter accepting the Tuple1,
  or consider a pattern matching anonymous function: `{ case (param1, param1) => ... }
            def sum = intList.reduce(x => x % 2 ==1).map(x => x * x).reduce((x+y) => x + y)
                                                                              ^
one error found

如何在脚本中使用filter,map,reduce方法?感谢您的帮助和支持。

更新:在代码中更新了Typos。

1 个答案:

答案 0 :(得分:3)

我可以回答你的问题:

  

如何在脚本中使用filter,map,reduce方法?

但我无法完全解决您的具体用例,因为您没有指定脚本应该执行的操作。

试试此代码

object SumOfSquaresOfOdd {
    def main(args: Array[String]) : Unit = {
        var intList = List(1,2,3,4,5,6,7,8,9,10)
        def sum = intList.filter(x => x % 2 ==1).map(x => x * x)
        println(sum)
    }
}

然后

~/Code/stack-overflow $ scalac SumOfSquaresOfOdd.scala
~/Code/stack-overflow $ scala SumOfSquaresOfOdd
List(1, 9, 25, 49, 81)
你似乎有点失落。以下是一些提示:

  1. 使用Int而不是Integer; Int是Scala的整数类型。而且你不需要导入它。
  2. 在这种情况下,不要延长App。请参阅此问题Difference between using App trait and main method in scala
  3. 使用println
  4. 的包装parens
  5. 文字List(1,2,3)将类型推断为List[Int];无需显式输入。检查Scala REPL。
  6. 我认为您将reducefilter混为一谈。比较最新的scaladoc:http://www.scala-lang.org/api/current/#scala.collection.immutable.List
  7. 运行scala代码的其他方法:http://joelabrahamsson.com/learning-scala-part-three-executing-scala-code/
  8. 如果您认真学习,强烈建议您Functional Programming Principles in Scala
  9. 学习Scala祝你好运! :)