如何在 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)
你好像有点失落。这里有一些提示:
- 使用
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 代码的其他方式:http://joelabrahamsson.com/learning-scala-part-three-executing-scala-code/
- 如果您认真学习,强烈建议您 Functional Programming Principles in Scala。
祝您学习 Scala 顺利! :)
作为学习的一部分,我试图将 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)
你好像有点失落。这里有一些提示:
- 使用
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 代码的其他方式:http://joelabrahamsson.com/learning-scala-part-three-executing-scala-code/
- 如果您认真学习,强烈建议您 Functional Programming Principles in Scala。
祝您学习 Scala 顺利! :)