Rebol: Encontrado una manera de autogenerar y ejecutar código dinámicamente, ¿hay una mejor manera?

StackOverflow https://stackoverflow.com/questions/1437110

  •  08-07-2019
  •  | 
  •  

Pregunta

He experimentado con esto:

>> code-block: copy []
== []
>> append code-block [func[][print "a"] ]
== [func [] [print "a"]]
>> do do code-block
a
>>

¿Hay alguna manera de evitar hacer " do " dos veces :)

¿Fue útil?

Solución

Lo que ha puesto en bloque de código no es la función, sino la fuente de la función, de ahí la necesidad de hacerlo una vez para hacer una función, luego hazlo nuevamente como una función.

Puedes ver eso así:

length? code-block
== 3

Para poner la función en bloque de código , puede hacer esto:

code-block: copy []
append code-block func[][print "a"]    ;; no block around the FUNC

O esto:

code-block: copy []
append code-block reduce [func[][print "a"] ]  ;; use REDUCE to evaluate the block

De cualquier manera, lo que está en bloque de código ahora es solo la función:

length? code-block
== 1
type? first code-block
== function!
do code-block     ;; what you asked for!
a
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top