2016-12-30 39 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