-3

作为我学习的一部分,我正在尝试将 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 方法?感谢您的帮助和支持。

更新:代码中的错字已更新。

4

1 回答 1

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在这种情况下不要扩展。参考这个问题在scala中使用App trait和main方法的区别
  3. 使用包装括号println
  4. 文字List(1,2,3)将被类型推断为List[Int]; 无需显式键入它。签入 Scala REPL。
  5. 我认为你reducefilter. 在最新的 scaladoc 中比较两者:http ://www.scala-lang.org/api/current/#scala.collection.immutable.List
  6. 其他运行 scala 代码的方法:http: //joelabrahamsson.com/learning-scala-part-three-executing-scala-code/
  7. 如果您认真学习,强烈建议您在 Scala 中执行函数式编程原则。

祝你学习 Scala 好运!:)

于 2016-05-06T12:03:17.073 回答