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

欢迎!请查看关于页面以获取更多关于它如何工作的信息。

0
提问< span class="qa-q-view-when"> 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}}以及任何like {{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报告)
...