命名空间在 Chicken Scheme 中如何工作?我现在正在使用parley
鸡蛋,当我定义一个名为例如的函数时read
,由于名称冲突而导致错误(实际上,因为我的read
覆盖parley
's own read
,并且以错误的类型调用它。
这是代码:
(use parley)
(define (read p) p) ; This `read` function conflicts.
(let loop ((l (parley "> ")))
(if (or (eof-object? l)
(equal? l "quit"))
(print "bye!")
(begin
(printf "you typed: ~s~%" l)
(loop (parley "> ")))))
如何避免此类碰撞?
UPDATE
我减少了重现此问题所需的代码:
(use parley)
(define (read p) p)
这会出现以下错误:Error: illegal non-atomic object: #<input port "readline.scm">
显然,我的read
功能与冲突parley
read
。但我不知道如何在不重命名我的函数的情况下避免这种情况。
根据文档 http://wiki.call-cc.org/man/4/Modules#import您可以使用与在模块中导入模块时相同的技巧。然后你有很多选择,比如前缀:
(use (prefix parley parley:)) ; all imported symbols have been prefixed with "parley:"
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)