Как вычислить число собственных функций в Rebol3?Каково количество родных! в Rebol3
(! помощи родного печатает родные функции в Lib, но он не возвращает блок слов.)
UPDATE: Я исправил вопрос после ошибки подсвечивается @HostileFork.
Как вычислить число собственных функций в Rebol3?Каково количество родных! в Rebol3
(! помощи родного печатает родные функции в Lib, но он не возвращает блок слов.)
UPDATE: Я исправил вопрос после ошибки подсвечивается @HostileFork.
Каталог туземцев (или по крайней мере слова их имен) построен во время загрузки:
>> length? system/catalog/natives
== 160
В lib есть больше определений, чем только для обычных. Определения наборов и других вещей. Но почти каждый житель доступен через нее при запуске:
>> natives: []
>> foreach [word value] lib [if native? :value [append natives word]]
>> length? natives
== 168
Некоторые из этих различий учитываются синонимами (Q для QUIT, --- для комментариев, и т.д.):
>> difference natives system/catalog/natives
== [native action q ! min max --- bind? pwd context]
ОТЕЧЕСТВЕННОЙ и ACTION являются специальными и по какой-либо причине не попадают в каталог.
(Обратите внимание, что в настоящее время эволюций Ren-C build of Rebol3, есть только одна функция! Тип данных. Таким образом, нет NATIVE? Или ACTION? И т.д. Таким образом, system/catalog/natives
ваш единственный способ узнать это.)
Спасибо @HostileFork, вы были очень ясны. Извините за тупую ошибку в коде (и я думаю, что слишком поздно, чтобы исправить вопрос). Почему в Ren-C нет различия между FUNCTION !, ACTION! и NATIVE! ? – noein
@noein [См. Чат] (http://chat.stackoverflow.com/transcript/message/34874083#34874083) – HostileFork
num: 0
foreach [w val] lib [if type? :val = native! [++ num]]
дает мне 700 в «недавней» сборки Rebol-3
Я знаю. Они должны быть 150-200. По этой причине метод, используемый мной, неверен. – noein
'тип? : val = native! 'is LOGIC! – HostileFork
Что такое 'lib'? –
Обратите внимание, что ** тип? : val = native! ** является фактически ** типом? (: val = native!) **, который является типом LOGIC !, который является «правдивым» значением. Следовательно, это просто дает вам все объявления в lib. – HostileFork
@GeekyI 'lib' является псевдонимом для того же контекста, что и' system/contexts/lib'. Здесь помещаются все определения бутстрапа. Контекст пользователя, в котором вы обычно пишете ('system/context/user'), первоначально является копией этих определений. Но lib по-прежнему доступен, поэтому даже если вы перезапишите что-то вроде 'print: func [x] [...]', вы можете вернуться к исходному определению через 'lib/print'. – HostileFork