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原语。它有什么不同,它有同样的缺点吗?
答案 0 :(得分:3)
主要区别在于,FUNCTION深入搜索正文中的set-words,而FUNCS只是浅层搜索它们。 FUNCS也使用略有不同的规范。
FUNCS已经存在了很长时间(不久之前发生了名称更改)。
那个值?函数“问题”与函数的局部变量(即使使用FUNC和/ LOCAL明确声明它们)初始化为NONE有关。这会导致VALUE?即使变量“尚未初始化”,函数也会产生TRUE。
一般来说,我没有看到这个“用NONE初始化”是一个“大问题”,虽然这种行为与全局变量或对象变量的行为不同