Как добавить данные в блок из R / S? - PullRequest
1 голос
/ 16 июня 2020

Я пытаюсь добавить данные в block из Red / System.

Red []

my-red-block: ["some text"] ; some already existen data in block

foo: routine [
    blk
]
[
    block/rs-append as red-block! blk as red-value! unicode/load-utf8 "new text" size? "new text"
]

foo my-red-block

print my-red-block

Я решил передать block в routine и изменить его там.

I получаю сообщение об ошибке:

*** Runtime Error 1: access violation
*** at: 630EB4DFh

1 Ответ

3 голосов
/ 16 июня 2020

Причина в том, что load-utf8 возвращает node!, который ссылается на внешний строковый буфер, а не на само значение string!.

node! по сути является указатель, и он не соответствует структуре высокоуровневых значений Red; однако, поскольку это указатель, его можно преобразовать в указатель другого типа, например, red-value! или любую другую структуру. Cra sh происходит, когда вы пытаетесь получить доступ к этому слоту искаженного значения.

Что касается исходного вопроса, это должно ответить на него.

...