Как напечатать блок без его оценки в Rebol

Я пытаюсь собрать генератор кода, и мне нужно напечатать блок (который содержит некоторый код для целевого языка) без его оценки (т.е. блока). Как мне это сделать?

Редактировать 1 - Я понимаю, что это может быть легко достигнуто, если бы я должен был встроить код Ruby в виде строки, но так как парсер Rebol, кажется, не возражает, я подумал, почему бы и нет?

rebol []

x: [
    [sym0 [(1..10).map{|n| puts n}]]
    [sym1 [foo << [1, 2, 3]]]
]

print x/1/1 ;prints sym0
print x/1/2 ;fails as print tries to evaluate the block

2 ответа

Попробуйте MOLD. Он генерирует строку из данных Rebol:

>> mold [1 + abc + 12-Dec-2012]
== "[1 + abc + 12-Dec-2012]"

Обратите внимание, что MOLD не является идеальным аналогом LOAD. В приведенном выше случае вы могли бы ЗАГРУЗИТЬ эту структуру обратно из строки... но некоторая информация о привязке будет потеряна в общем случае.


Редактировать 1: Ну, то, что вы пытаетесь сделать, довольно странно. Что вы получаете от плесени:

>> mold x/1/2
== {[(1.0.10) .map "|n| puts n"]}

Это говорит о любопытной природе Ребола о том, что так много вещей законно, что другие языки могут генерировать синтаксические ошибки. Это часть того, что делает его хорошей адаптируемой английской системой для написания DSL.

Но... Ребол просто не Руби. Лексическая интерпретация символов совершенно иная. Это означает, что вы должны либо сделать что -то похожее на Rubol, чтобы "подковать" код Ruby в модель Rebol как своего рода "Ruby DOM"... и затем заставить его вернуться с помощью ruby-mold (что может быть круто, я за это). Или вы должны использовать строку.

Используйте ЗОНД. ЗОНД не оценивает данные, которые он печатает. Также он возвращает те же данные, что и вы, поэтому вы можете поместить PROBE в любое место вашего кода, чтобы проверить ваши значения, что отлично подходит для отладки.

MY-FUNC MY-DATA
MY-FUNC PROBE MY-DATA ; will print unevaluated MY-DATA to console
PROBE MY-FUNC MY-DATA ; will print unevaluated output of MY-FUNC to console 
Другие вопросы по тегам