2024 Clojure 状态调查! 分享您的想法。

欢迎!请在 关于 页面了解更多有关该功能的信息。

0
ClojureScript

使用 deftype/defrecord 定义的、具有 {{default}} 字段的类型,在使用属性访问时将错误地返回 {{nil}}。以下示例将返回 {{nil}}。

`
(deftype Foo [default])

(let [foo (Foo. "bar")]
(.-default foo))
`

9 答案

0

评论者:noprompt

附上补丁。我应该指出的是,我不得不从编译器命名空间借用 js-reserved,并且警告信息将硬编码的符号信息而不是使用编译器的 munge fn。

0

评论者:noprompt

出于对历史的考虑,我应该在补丁中提供更多背景信息(由于某种原因我无法编辑问题标题)。这不仅在于 {{.-default}},还包括任何也是 JavaScript 标识符的字段名(例如 {{public}},{{private}},{{if}})。

0

评论者:dnolen

请将 {{js-reserved}} 和任何像 {{munge}} 这样的辅助函数提升到共享命名空间 {{cljs.util}},以便可以进行共享并避免硬编码。谢谢。

0

评论者:noprompt

你确定吗,David?这可能会使补丁更嘈杂。如果没有问题,我很乐意这样做。

0

评论者:dnolen

我确定,我想避免这种代码复制。最终会更干净,并且对未来的改进更好。

0

评论者:noprompt

已更新为新重构

0

评论者:dnolen

警告是不可取的。相反,我们只需混合并确保属性访问始终正常工作。

0

评论者:dnolen

既然我们有 CLJS-1620,警告似乎是一个不错的答案。

0
参考:https://clojure.atlassian.net/browse/CLJS-871 (由noprompt报告)
...