Ребол: Нашел способ автоматически генерировать и выполнять код динамически, есть ли лучший способ? - PullRequest
0 голосов
/ 17 сентября 2009

Я экспериментировал с этим:

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

Есть ли способ избежать "сделать" дважды:)

1 Ответ

4 голосов
/ 17 сентября 2009

То, что вы поместили в кодовый блок , является не функцией, а источником функции, поэтому необходимо сделать один раз, чтобы создать функцию, затем сделать снова как функцию.

Вы можете видеть это так:

length? code-block
== 3

Чтобы просто поместить функцию в кодовый блок , можно сделать это:

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

Или это:

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

В любом случае, то, что находится в кодовом блоке , теперь является просто функцией:

length? code-block
== 1
type? first code-block
== function!
do code-block     ;; what you asked for!
a
...