set!可以改变一个变量的定义,但是它只能改变一个模块内部自己的定义,它无法改变导入的绑定。
如果一个模块想授权其它模块改变自己的导出,可以导出自己的可变函数来改变自己的导出。
禁止分配导入变量可以支持模块化,而且可以使程序执行更有效率。
如果在模块里的一个标识符没有调用set!,那么这个标识符可以被当做常量。
一般情况下重定义不被允许。基于文件的模块,简单修改文件不会在任何情况下重定义。因为文件模块在需要的时候被加载,而且之前加载的定义之后也可以使用。使用racket反射可以重定义一个模块。在repl中,非文件模块可以之定义,但是在重定义之前绑定引用,也会使重定义失败。
为了测试的目的,racket反射层提供了一个参数compile-enforce-module-constants解除常量约束。
6.9分配和重定义
最后编辑于 :
©著作权归作者所有,转载或内容合作请联系作者
- 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
- 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
- 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...