如何在 Scala 脚本中使用过滤函数

how do I use filter function in 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 脚本或 class 以便根据需要重新运行任意次数。我将其保存在名为 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 方法?感谢您的帮助和支持。

UPDATE:更新了代码中的拼写错误。

我可以回答你的问题:

How do I use the filter, map, reduce methods in a script?

但是我无法完全解决您的具体用例,因为您没有指定脚本应该做什么。

试试这个代码

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而不是IntegerInt 是 Scala 的整数类型。而且你不需要导入它。
  2. 在这种情况下不要扩展 App。参考这个问题Difference between using App trait and main method in scala
  3. println
  4. 使用换行括号
  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

祝您学习 Scala 顺利! :)