Da blocco a codice


#1

Qualcuno di voi ha idea su come trasformare un block in una stringa
contente il suo codice?
mi serve per poter iniettare nuovo codice nel blocco per una DSL. mi
servono i binding del blocco, quindi non posso semplicemente
aggiungere una chiamata in coda alla chiamata al blocco.


Chiaroscuro

Liquid Development: http://liquiddevelopment.blogspot.com/


#2

non sono un guru di DSL e non so rispondere alla tua domanda, ma prova a
dare un okkio qui
http://www.whytheluckystiff.net/articles/seeingMetaclassesClearly.html

forse trovi quello che cerchi (anche se non metti esattamente un blocco
in
una stringa)
ah… se trovi risposta ai tuoi dubbi faccelo sapere che sono curioso

On 4/27/06, chiaro scuro removed_email_address@domain.invalid wrote:

Liquid Development: http://liquiddevelopment.blogspot.com/


Ml mailing list
removed_email_address@domain.invalid
http://lists.ruby-it.org/mailman/listinfo/ml


Paolo Donà
email me: paolo[dot]dona[at]gmail[dot]com
skype me: paolo[dot]dona


#3

giovedi 27 aprile 2006, alle 11:10, il navigatore chiaro scuro scrisse:

Qualcuno di voi ha idea su come trasformare un block in una stringa
contente il suo codice?

http://www.zenspider.com/ZSS/Products/ParseTree/
dovrebbe fare al caso tuo

mi serve per poter iniettare nuovo codice nel blocco per una DSL.
mi servono i binding del blocco, quindi non posso semplicemente
aggiungere una chiamata in coda alla chiamata al blocco.

cosa intendi con i binding del blocco?


#4

Qualcuno di voi ha idea su come trasformare un block in una stringa
contente il suo codice?
mi serve per poter iniettare nuovo codice nel blocco per una DSL. mi
servono i binding del blocco, quindi non posso semplicemente
aggiungere una chiamata in coda alla chiamata al blocco.

Se oltre al binding non ci sono altre considerazioni che ti fanno
scartare questa possibilità , puoi provare con qualcosa del genere:

bard@yokai:/tmp$ cat test.rb
def make_block
  a = 5
  proc {
    puts "a => #{a}"
    external_code_callback(binding)
    puts "a => #{a}"
  }
end

def external_code_callback(foreign_binding)
  code_to_inject = "a = 6"
  eval(code_to_inject, foreign_binding)
end

block = make_block
block.call

bard@yokai:/tmp$ ruby test.rb
a => 5
a => 6


blog: http://blog.hyperstruct.net
code: http://dev.hyperstruct.net, http://repo.hyperstruct.net


#5

On 4/27/06, Gabriele L. removed_email_address@domain.invalid wrote:

giovedi 27 aprile 2006, alle 11:10, il navigatore chiaro scuro scrisse:

Qualcuno di voi ha idea su come trasformare un block in una stringa
contente il suo codice?

http://www.zenspider.com/ZSS/Products/ParseTree/
dovrebbe fare al caso tuo

adesso guardo, grazie.

cosa intendi con i binding del blocco?

voglio poter estrarre i nomi e i valori di variabili locali dichiarate
entro il blocco da fuori del blocco.
per fare questo devo interrogare il contesto del blocco, che ottengo
con il metodo ‘binding’

non voglio però (entro il blocco) dover ritornare esplicitamente i binding.