Как использовать функцию фильтра в скрипте Scala
Как часть моего обучения, я пытаюсь записать выражение Scala в скрипт scala, но столкнулся с ошибкой.
Scala код, который я успешно выполняю в Scala REPL
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
Как мне использовать фильтр, карту, методы сокращения в скрипте? Ценю вашу помощь и поддержку.
ОБНОВЛЕНИЕ: опечатки обновлены в коде.
1 ответ
Я могу ответить на ваш вопрос:
Как мне использовать фильтр, карту, методы сокращения в скрипте?
Но я не могу полностью решить ваш конкретный вариант использования, потому что вы не указали, что должен делать скрипт.
Попробуйте этот код
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
в этом случае. Обратитесь к этому вопросу. Разница между использованием признака App и основного метода в Scala - Используйте оберточные парены для
println
- Буквальный
List(1,2,3)
будет зависеть от типаList[Int]
; нет необходимости явно набирать его. Проверьте в Scala REPL. - Я думаю ты запутался
reduce
сfilter
, Сравните оба в последнем скаладоке: http://www.scala-lang.org/api/current/ - Другие способы запуска кода scala: http://joelabrahamsson.com/learning-scala-part-three-executing-scala-code/
- Настоятельно рекомендуем вам ознакомиться с принципами функционального программирования в Scala, если вы серьезно относитесь к обучению.
Удачи в изучении Scala!:)