如何将任意标签附加到 Scheme 中的闭包?
以下是我想用它来做的几件事:
(1) 标记提供接口的闭包,为它们所代表的内容生成一个字符串,就像@kud0h在这里要求的那样。一般->string
过程可能包括如下代码:
(display (if (stringable? x)
(x 'string)
x)
str-port)
(2) 更一般地,确定闭包是否是遵守通用对象接口规则的“对象”,或者可能告诉对象的类(类似于@KPatnode在此处询问的内容)。
我不能通过调用一个过程来查询它是否支持某个接口,因为如果它不支持一个已知的接口,调用该过程会产生不可预知的结果,很可能是运行时错误。
Chez Scheme具有允许您向符号添加键和值的过程putprop
。getprop
但是,闭包可以是匿名的,也可以绑定到不同的符号,因此我更愿意将调用约定标记附加到闭包本身,而不是绑定到的符号。
我现在唯一的想法是维护系统中所有“字符串”或“对象”闭包的全局哈希表。这似乎有点笨拙。有没有更简单、更优雅、更高效的方法?