Доступ к функциям во время выполнения из 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
на значения этого типа, а также вспомогательные функции, которые могут быть полезны в подпрограммах. Тем не менее, я бы предположил, что вспомогательные функции, не привязанные к спецификации языка, не будут гарантированно присутствовать по мере развития реализации. Поэтому я бы предостерег от того, чтобы слишком на них полагаться.