作为我学习的一部分,我正在尝试将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。
答案 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)
你似乎有点失落。以下是一些提示:
Int
而不是Integer
; Int
是Scala的整数类型。而且你不需要导入它。App
。请参阅此问题Difference between using App trait and main method in scala println
List(1,2,3)
将类型推断为List[Int]
;无需显式输入。检查Scala REPL。reduce
与filter
混为一谈。比较最新的scaladoc:http://www.scala-lang.org/api/current/#scala.collection.immutable.List 学习Scala祝你好运! :)