Доступ к функциям во время выполнения из Red/System

Таким образом, проблема возникла при экспериментировании с маршалингом значений между Red и Red/System. Я хотел бы получить доступ к кишкам объекта, переданного в рутину.

Я заметил, что в Red Runtime есть функции для обработки таких вещей, как get-values, get-words и т. Д. В контексте объекта. В источниках времени выполнения есть файл, который называется object.reds

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

2 ответа

Решение

Вы можете просто вызвать их прямо из Red/System. Никаких дополнительных включений не требуется. Вот краткий пример:

Red []

get-object-size: routine [
    obj [object!]
    return: [integer!]
] [
    object/get-size obj
]

print get-object-size object [foo: 42 bar: 99]

Когда вы скомпилируете и запустите это, он в конечном итоге выведет 2,

Как правило, для каждого типа данных Red имеется исходный файл Red/System (см. Репозиторий), который определяет context чье имя совпадает с этим типом данных без ! (кроме context! а также function!, где _ префикс, чтобы избежать конфликта имен). В такой contextесть функции, определенные для каждого из actions на значения этого типа, а также вспомогательные функции, которые могут быть полезны в подпрограммах. Тем не менее, я бы предположил, что вспомогательные функции, не привязанные к спецификации языка, не будут гарантированно присутствовать по мере развития реализации. Поэтому я бы предостерег от того, чтобы слишком на них полагаться.

Другие вопросы по тегам