欢迎!请在 关于 页面了解更多有关该功能的信息。
使用 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,警告似乎是一个不错的答案。