Как вы определяете 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 ) ]