2014-01-03 10 views
2

Я пытаюсь собрать генератор кода и вам нужно распечатать блок (который содержит некоторый код для целевого языка) без него (т.е. блока), являющегося оценены. Как мне это сделать?Как распечатать блок без его оценки в 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 
+0

Я хотел бы добавить, что у меня есть рубин код, внедренный внутри блоков и когда я пытаюсь лепить или зондировать блок, Rebol удаляет фигурные скобки и столовые о любых строках и числах, содержащихся в нем – rebnoob

+0

Вы можете заложить внесите свой сценарий более конкретно в вопрос? (Существует кнопка «Изменить».) Я не совсем уверен, что вы имеете в виду здесь, но код Ruby не совместим с парсером Rebol в целом. Поэтому в общем случае Ruby должен быть в строковой константе, если только вы не используете какой-либо подмножество языка. – HostileFork

+0

См. Обновленный ответ ниже. – HostileFork

ответ

1

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

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

Обратите внимание, что MOLD не является идеальным аналогом LOAD. В вышеприведенном случае вы можете LOAD, что структура обратно из строки ..., но часть информации о привязке будет потеряна в общем случае.


Edit 1: Ну, что вы пытаетесь сделать, это довольно дурацкая. Что вы получаете от прессформы:

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

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

Но ... Rebol просто не Ruby. Лексическая интерпретация символов совершенно другая. Это означает, что вы либо должны сделать что-то Rubol-like в «shoehorn» Ruby code в модель Rebol как своего рода «Ruby DOM» ... а затем принудить его сделать с ruby-mold (что может быть круто, я за него) , Или вам нужно использовать строку.

+0

Спасибо HostileFork, я понимаю, что Rebol не Ruby и наоборот, поэтому я хотел напечатать блок без оценки. Мне жаль, что вы думаете, что это дурацкое! И я не знал о Руболе, спасибо, я проверю это. – rebnoob

0

Использование PROBE. PROBE не оценивает данные, которые он печатает. Также он возвращает те же данные, которые вы его подаете, поэтому вы можете поместить 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 
+0

Спасибо, но я боюсь, что это не сработает в моем случае. См. Мой комментарий по вопросу. – rebnoob

 Смежные вопросы

  • Нет связанных вопросов^_^