欢迎!有关这个网站的更多信息和功能,请参阅 关于 页面。
使用 deftype/defrecord 定义的包含 {{default}} 字段的类型在属性访问时将错误地返回 {{nil}}。以下示例将返回 {{nil}}。
`(deftype Foo [default])
`
(let [foo (Foo. "bar")](.-default foo)) `
评论由:noprompt 制作
附加补丁。我应该指出,我不得不从编译器命名空间借用 js-reserved,并且警告消息提供了硬编码的混乱符号信息,而不是重用编译器的 munge fn。
为了留下历史,我应该提供更多关于这个补丁的背景信息(出于某种原因我无法编辑问题标题)。问题不只是一个 {{.-default}},而是任何也是 JavaScript 标识符的属性名(例如{{public}}、{{private}}、{{if}})。
评论由:dnolen 制作
请将 {{js-reserved}} 和任何类似的诸如 {{munge}} 的辅助函数升到共享命名空间 {{cljs.util}} 中,以便可以进行逻辑共享并避免硬编码。谢谢。
你确定,David?这可能会使这个补丁变得有点嘈杂。如果没有问题,我很乐意这样做。
我确定,我想避免这种代码重复。最终会更干净,并且向前发展得更好。
更新为使用新的重构
这个警告并不理想。相反,我们只需焊接并确保属性访问始终正常工作。
现在我们有 CLJS-1620,一个警告似乎是一个好的答案。