Как добавить данные в блок из R/S?

Я пытаюсь добавить данные в 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 и изменить его там.

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

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

person Dmitry Bubnenkov    schedule 16.06.2020    source источник


Ответы (1)


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

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

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

person 9214    schedule 16.06.2020