Nelle varie Lisps, è possibile per me creare una successione di funzioni come se fossero appena stati i valori normali:Come definire un elenco di funzioni della stessa arity in Scala?
(def ops [+ - * /])
Quali Posso quindi scorrere, ancora una volta, come se fossero solo i valori normali :
(doseq [op ops] // (doseq (op ops) is like for (op <- ops) in scala
(println (op 1 2 3 4)))
Ora, ho provato un paio di cose in Scala, tutti loro mancanza:
scala> List(+, -, *, /)
<console>:1: error: illegal start of simple expression
List(+, -, *, /)
^
scala> List[Double => Double](+, -, *, /)
<console>:1: error: illegal start of simple expression
List[Double => Double](+, -, *, /)
^
scala> List[Double => Double](+_, -_, *_, /_)
<console>:8: error: not found: value *
List[Double => Double](+_, -_, *_, /_)
^
<console>:8: error: not found: value/
List[Double => Double](+_, -_, *_, /_)
^
Allora, qual è la procedura corretta di definire un elenco di funzioni/operatori in Scala?
ci sono buone risposte qui sotto, ma, come si può vedere, è possibile definire in modo solo * stesse funzioni tipizzati *. Se vuoi memorizzare diverse funzioni digitate devi usare * strutture eterogenee * (lista per esempio). – DaunnC
@DaunnC ti dispiacerebbe elaborare l'uso di * utilizzare strutture eterogenee * in un'altra risposta alla domanda? Apprezzerei. –