Как вы используете директиву #call для функции Red со строковыми типами данных в качестве параметров?
Учитывая сценарий, такой как ниже, который еще не компилируется, как я могу использовать #call
использовать мою красную функцию из Red/System?
Red []
pff: function [a [string!] ][print a]
#system [
#call [pff "hello"]
]
Существует несоответствие типов. Что нужно сделать, чтобы преобразовать строку в правильный тип данных Red/System?
2 ответа
Чтобы раскрыть правильный ответ Питера, в данном конкретном случае вам нужно усвоить к-строку как красную строку!, используя string/load
, как это:
Red []
pff: function [a [string!] ][print a]
#system [
s: "hello"
hello: string/load s 1 + length? s UTF-8
#call [pff hello]
]
Заметки:
Красные / системные строки пока только в формате ASCII, поэтому вам нужно указать UTF-8 в качестве формата кодировки источника.
Вам нужно передать размер c-строки с учетом терминального NUL (отсюда
+ 1
).
Внутренний API не задокументирован, так как он не завершен. Не стесняйтесь спрашивать здесь или на других наших каналах связи, если вам нужна информация об этом.
Вам нужно сделать вызовы к Red Runtime API для выполнения преобразования. API времени выполнения Red еще не задокументирован, поэтому вам нужно либо прочитать код, либо спросить одного из немногих, кто знаком с ним. (Я сделал немного из обоих).
Я написал функцию для преобразования красной строки! к красной / системной c-струне в кодировке UTF-8!, он на github.