L'idea della funzione in Scala / Functionaljava

0

Da sviluppo guidato dal cervello

It turns out, that every Function you’ll ever define in Scala, will become an instance of an Implementation which will feature a certain Function Trait.

There is a whole bunch of that Function Traits, ranging from Function1 up to Function22.

Since Functions are Objects in Scala and Scala is a statically typed language, it has to provide an appropriate type for every Function which comes with a different number of arguments. If you define a Function with two arguments, the compiler picks Function2 as the underlying type.

Inoltre, da blog di Michael Froh

You need to make FunctionN classes for each number of parameters that you want? Yes, but you define the classes once and then you use them forever, or ideally they're already defined in a library (e.g. Functional Java defines classes F, F2, ..., F8, and the Scala standard library defines classes Function1, ..., Function22)

Quindi abbiamo un elenco di tratti di funzione (Scala) e un elenco di interfacce (Functional-java) per permetterci di avere funzioni di prima classe.

Sto cercando di capire esattamente perché questo è il caso. Lo so, ad esempio in Java, quando scrivo un metodo, dico

public int add(int a, int b){
    return a + b;
}

Che non posso andare avanti e scrivere

add(3,4,5);

(errore sarebbe qualcosa di simile: metodo add non può essere applicato per dare tipi)

Dobbiamo semplicemente definire un'interfaccia / tratto per funzioni con parametri diversi, a causa della tipizzazione statica?

    
posta lwm 24.11.2012 - 15:43
fonte

1 risposta

1

Uno deve implementare le funzioni come oggetti di prima classe in Scala in qualche modo, no? Quando il programmatore, ad es. assegna una funzione letterale a una variabile, quella variabile deve ottenere un certo valore in runtime che rappresenti la funzione in un modo sicuro dal tipo. Gli implementatori di Scala hanno scelto di farlo nel modo in cui funzionano i tratti FunctionN. Quindi, tutta la sintassi per le funzioni in Scala è essenzialmente solo zucchero sintattico per quella implementazione. Ogni funzione di ad es. un certo tipo (A, B C) => D diventa un oggetto che ha tipo Function3[A,B,C,D] in fase di runtime e quindi, tra le altre cose, implementa un metodo apply(p1: A, p2: B, p3: C): D . L'applicazione della funzione è zucchero sintattico per chiamare il metodo apply ecc. Inoltre, questo è il modo in cui Java può interagire con le funzioni di Scala.

    
risposta data 30.12.2012 - 20:04
fonte

Leggi altre domande sui tag