2016-12-30 37 views
3

如何計算Rebol3中的原生函數號碼?本地人的數量是多少?在Rebol3中

(!在LIB 幫助本地打印本地函數,但它不返回字塊。)

更新:我已經糾正了由@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表示退出,---評等):

>> difference natives system/catalog/natives 
== [native action q ! min max --- bind? pwd context] 

NATIVE和ACTION是特殊的,無論出於什麼原因都不會將其納入目錄。

(請注意,在Ren-C build of Rebol3的電流變陣,只有一個功能!數據類型,所以沒有提供原生?還是行動?等等。因此,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

'type? :val = native!'是邏輯! – HostileFork