欢迎!请查看关于页面以获取更多关于它如何工作的信息。
使用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}}以及任何like {{munge}}等辅助工具提升为共享命名空间{{cljs.util}},以便可以共享逻辑并避免硬编码。谢谢。
你确定吗,David?这可能会使这个补丁有点嘈杂。如果没有问题,我很乐意去做。
我确定,我想避免这种代码复用。最终会更干净,对未来发展也更好。
已更新为使用新的重构
这个警告不令人满意。相反,我们应该只是调整并确保属性访问始终有效。
现在我们有了 CLJS-1620,一个警告似乎是个好答案。