Certo eval funzionerebbe molto bene se non fosse che mancano le
“inizializzazioni” delle strutture dati (field_list={} etc… per
intenderci)
Al momento ho risolto cambiando la generazione delle string (che vengono
generate da un post http, così posso usare YAML per salvarmi la
struttura) resta comunque la curiosità …
Ho l’impressione che servirebbe una di queste due cose:
Un metodo per convertire un blocco in una stringa, così potresti
farne il parsing e generare le definizioni mancanti iniziando con
field_list = {}. In pratica è l’inverso della eval e se ci fosse
potresti scrivere qualcosa come
Un metodo per avere il testo del codice della linea che ha generato
un errore. Sapendo che field_list[:Company][:business_name] = true ha
generato un’eccezione potresti fare l’eval di field_list[:Company] = {}
Certo eval funzionerebbe molto bene se non fosse che mancano le
“inizializzazioni” delle strutture dati (field_list={} etc… per
intenderci)
Al momento ho risolto cambiando la generazione delle string (che vengono
generate da un post http, così posso usare YAML per salvarmi la
struttura) resta comunque la curiosità …
thanx! nel mio caso ho risolto (come ho scritto sopra) modificando
appunto la generazione della stringa (che ho trasformato in un oggetto
tramite javascript), la mia restava proprio una curiosità generale, un
metodo che data una stringa generi un albero “credibile” che potrebbe
essere di array o hash (magari intelligente in modo che a ogni
successiva richiesta capisca appunto se si tratta di un array o di una
hash modificando il risultato)…
Ero giusto per sapere se qualcuno lo aveva già fatto o meno
(probabilmente lo scriverò io visto che potrebbe servirmi in futuro…
chi lo sà )
Ho l’impressione che servirebbe una di queste due cose:
Un metodo per convertire un blocco in una stringa, cos� potresti
farne il parsing e generare le definizioni mancanti iniziando con
field_list = {}. In pratica � l’inverso della eval e se ci fosse
potresti scrivere qualcosa come
SCRIPT_LINES__ pu� essere tuo amico (la feature meno nota di ruby
AFAICT), ma come dici sotto tu, visto che crei programmaticamente sta
cosa tanto vale metterci anche i metadati.
Ho l’impressione che servirebbe una di queste due cose:
Un metodo per convertire un blocco in una stringa, così potresti
farne il parsing e generare le definizioni mancanti iniziando con
field_list = {}. In pratica è l’inverso della eval e se ci fosse
potresti scrivere qualcosa come
SCRIPT_LINES__ può essere tuo amico (la feature meno nota di ruby
AFAICT), ma come dici sotto tu, visto che crei programmaticamente sta
cosa tanto vale metterci anche i metadati.
$ cat t.rb
SCRIPT_LINES__ = {} #se definito, l’interprete carica hash con coppie
file/content
at_exit do p SCRIPT_LINES__ end
$ cat t2.rb
puts “ciao”
mecbuc:Cascaad (stable) rff$ ruby -rt.rb t2.rb
ciao
{“t2.rb”=>[“puts "ciao"\n”]}
Anche ripper & parsetree e simili ti permettono di farlo riparsandoti
il codice (forse evil.rb ?) ma sono hack.
Infine, mentre controllavo le possibili soluzioni ho trovato queste due
cose interessanti: