A Domanda puramente teorica su Tcl.Funzioni anonime Tcl
Seguendo this question stavo pensando a quale sarebbe il modo migliore per implementare le funzioni anonime in Tcl.
Il risultato finale dovrebbe essere permettendo uno sviluppatore per passare un proc completo come argomento per anohter proc:
do_something $data {proc {} {input} {
puts $input;
}};
che sarebbe simile a quella di javascript
do_something(data, function (input) {
alert(input);
});
ora, naturalmente, questo non lo farà lavoro OOTB. Stavo pensando a qualcosa del genere:
proc do_something {data anon_function} {
anon_run $anon_function $data
}
proc anon_run {proc args} {
set rand proc_[clock clicks];
set script [lreplace $proc 1 1 $rand];
uplevel 1 $script;
uplevel 1 [concat $rand $args];
uplevel 1 rename $rand {}; //delete the created proc
}
Questo funziona. Ma speravo di ottenere suggerimenti per un modello migliore di questo, in quanto non è molto elegante e non utilizza le fantastiche funzionalità Tcl. Per lo più mi piacerebbe sbarazzarmi di chiamare manualmente anon_run
.
Inoltre, a differenza di Javascript non fa chiusure. Le chiusure sono semanticamente complicate in Tcl perché in realtà non si adattano al modello di datatype di Tcl, e i termini lambda come sopra rendono questo problema particolarmente ovvio (non è un grosso problema con le procedure, ma semplicemente una questione di programmazione semplice). –
Apprezzo la risposta dettagliata e ben spiegata. –
E ho effettivamente hackerato una [forma limitata di chiusure] (https://chiselapp.com/user/kbk/repository/tclquadcode/artifact/9cd98bc023dd3ef1?ln=353,382) per uno dei miei progetti. –