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

欢迎!请参阅关于页面以了解更多工作原理。

0投票
ClojureScript

使用`deftype/defrecord`定义并具有`{{default}}`字段的类型,在属性访问中会不正确地返回`{{nil}}`。以下示例将返回`{{nil}}`。

`
(deftype Foo [default])

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

9个答案

0投票

评论者:noprompt

附加补丁。我需要指出,我不得不从编译器命名空间借用js-reserved,提供的警告信息将munged符号信息硬编码而不是重用编译器的munge函数。

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 报告)
...