Mi chiedo se un metodo in un linguaggio di programmazione funzionale debba ricevere tutte le variabili dalla lista degli argomenti, o se sia ok usare le variabili dall'ambito esterno?
Ma lasciatemi spiegare il contesto: l'ambiente in cui lavoro è incentrato sulla programmazione (o meglio: scripting) di Scala in Scala-REPL / Scala-Notebook. Quindi tutti i metodi che definiamo sono solo usati all'interno del REPL, quindi non esiste un ambito "esterno". I metodi che definiamo non vengono mai usati da "outside" come faresti in un normale ambiente OO. Quindi con i metodi intendiamo effettivamente le funzioni ...
Data questa premessa, cerco sempre di definire le mie funzioni (più precisamente: i metodi) per essere autosufficienti, cioè che non si acceda a nessuna variabile dall'ambito esterno. Questo ha il vantaggio di poter riordinare il mio codice, o anche copiare e incollare il mio metodo su un altro script e riutilizzarlo. Lo svantaggio è che l'argomento del metodo-List è saltato in aria e potrebbe diventare molto lungo. In questo caso, normalmente definisco strutture di dati dedicate (ad esempio per le costanti) e le passiamo come 1 variabile.
Quindi la mia domanda è: devo sempre passare tutte le variabili in modo esplicito o (in quali circostanze) è accettabile accedere allo scope esterno?