2016-12-30 10 views
3

Как вычислить число собственных функций в Rebol3?Каково количество родных! в Rebol3

(! помощи родного печатает родные функции в Lib, но он не возвращает блок слов.)

UPDATE: Я исправил вопрос после ошибки подсвечивается @HostileFork.

+0

Что такое 'lib'? –

+0

Обратите внимание, что ** тип? : val = native! ** является фактически ** типом? (: val = native!) **, который является типом LOGIC !, который является «правдивым» значением. Следовательно, это просто дает вам все объявления в lib. – HostileFork

+1

@GeekyI 'lib' является псевдонимом для того же контекста, что и' system/contexts/lib'. Здесь помещаются все определения бутстрапа. Контекст пользователя, в котором вы обычно пишете ('system/context/user'), первоначально является копией этих определений. Но lib по-прежнему доступен, поэтому даже если вы перезапишите что-то вроде 'print: func [x] [...]', вы можете вернуться к исходному определению через 'lib/print'. – HostileFork

ответ

3

Каталог туземцев (или по крайней мере слова их имен) построен во время загрузки:

>> 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 ваш единственный способ узнать это.)

+0

Спасибо @HostileFork, вы были очень ясны. Извините за тупую ошибку в коде (и я думаю, что слишком поздно, чтобы исправить вопрос). Почему в Ren-C нет различия между FUNCTION !, ACTION! и NATIVE! ? – noein

+0

@noein [См. Чат] (http://chat.stackoverflow.com/transcript/message/34874083#34874083) – HostileFork

0
num: 0 
foreach [w val] lib [if type? :val = native! [++ num]] 

дает мне 700 в «недавней» сборки Rebol-3

+0

Я знаю. Они должны быть 150-200. По этой причине метод, используемый мной, неверен. – noein

+0

'тип? : val = native! 'is LOGIC! – HostileFork