内置FUNCTION和FUNCS附加组件有什么区别?

时间:2010-07-17 05:22:04

标签: scope rebol rebol3

Rebol 3中有new implementation of FUNCTION,默认情况下允许变量自动绑定到本地上下文。

FUNCTION似乎有VALUE的问题? test,因为即使尚未在运行时设置变量,它返回TRUE:

foo: function [] [
    if value? 'bar [
        print [{Before assignment, bar has a value, and it is} bar]
    ]

    bar: 10

    if value? 'bar [
        print [{After assignment, bar has a value, and it is} bar]
    ]
]

如果你打电话给FOO,你会得到:

Before assignment, bar has a value, and it is none
After assignment, bar has a value, and it is 10

这不是FUNC的工作方式(它只表示BAR在赋值后有一个值)。但是FUNC不会自动使变量本地化。

我在Ladislav Mecir创建的图书馆里找到了FUNCS原语。它有什么不同,它有同样的缺点吗?

http://www.fm.vslib.cz/~ladislav/rebol/funcs.r

1 个答案:

答案 0 :(得分:3)

主要区别在于,FUNCTION深入搜索正文中的set-words,而FUNCS只是浅层搜索它们。 FUNCS也使用略有不同的规范。

FUNCS已经存在了很长时间(不久之前发生了名称更改)。

那个值?函数“问题”与函数的局部变量(即使使用FUNC和/ LOCAL明确声明它们)初始化为NONE有关。这会导致VALUE?即使变量“尚未初始化”,函数也会产生TRUE。

一般来说,我没有看到这个“用NONE初始化”是一个“大问题”,虽然这种行为与全局变量或对象变量的行为不同