Как вы определяете 8-е пространства имен в массиве?

Восьмой использует пространства имен вместо словарей. Каждое пространство имен имеет свое целочисленное представление.

ok> ns:a . cr ns:n . cr
4
2

Итак, 2 для пространства имен чисел, а 4 для массивов.

Я хочу создать массив, содержащий пространства имен, которые затем я могу поместить в TOS (верхняя часть стека).

Однако, если я просто напишу это

ok> [ ns:a , ns:n ]
Exception: invalid JSON array: at line 1 char 3 in ....: cr (G:;;; +000004c2)
Exception: can't find: :a: at line 1 char 6 in (null): cr (G:??? +00000029)
Exception: can't find: ,: at line 1 char 8 in (null): cr (G:??? +00000029)
Exception: can't find: ]: at line 1 char 15 in (null): n (G:??? +00000029)

2 ответа

Решение

Я разработчик 8-го. Решение с помощью ' ns:a на самом деле не то, что вам нужно, так как это помещает слово в массив вместо значения, которое возвращало бы слово.

Вы можете выполнить то, что вы ищете, используя обратную галочку:[`ns: a`]

Backtick подает текст до следующего обратного тика в eval и помещает значение (каким бы оно ни было) в создаваемый вами JSON (он не ограничивается JSON, это общая конструкция).

Вместо этого вы можете сохранить адрес функции в массиве

[ ' ns:n , ' ns:a ]

и получить доступ к значениям, захватив значение массива и выполнить его

0 a:@ w:exec . cr
2
ok>

Вы также можете использовать анонимные функции

[ ( ns:a ) , ( ns:m ) ]
Другие вопросы по тегам