欢迎!请参阅关于页面以了解更多工作原理。
使用`deftype/defrecord`定义并具有`{{default}}`字段的类型,在属性访问中会不正确地返回`{{nil}}`。以下示例将返回`{{nil}}`。
`(deftype Foo [default])
`
(let [foo (Foo. "bar")](.-default foo)) `
评论者:noprompt
附加补丁。我需要指出,我不得不从编译器命名空间借用js-reserved,提供的警告信息将munged符号信息硬编码而不是重用编译器的munge函数。
为了历史记录,我应该提供更多关于这个补丁的背景信息(出于某种原因,我无法编辑问题标题)。这不仅仅涉及`{{.-default}}`,任何也是JavaScript标识符的字段名(例如`{{public}}`、`{{private}}`、`{{if}}`)。
评论者:dnolen
请将{{js-reserved}}和任何像{{munge}}这样的辅助程序提升到共享命名空间{{cljs.util}},以便逻辑可以共享并且避免硬编码。谢谢。
你确定吗,David?这可能会让这个补丁有一点嘈杂。如果没有问题,我很乐意这么做。
我确定,我想避免这种代码复制。最终会更干净,便于以后操作。
更新为使用新的重构
警告是不可取的。相反,我们应该只是简单地修改并确保始终可以访问属性。
现在我们有 CLJS-1620,一个警告似乎是一个很好的答案。