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](https://clojure.atlassian.net/browse/CLJS-871)(由 noprompt 建立)
...