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
by

评论者:noprompt

你确定吗,David?这可能会让这个补丁变得有点吵。如果没有问题,我很乐意这样做。

0
by

评论者:dnolen

我知道,我想避免这种代码复制。最后会更简洁,并且更有利于未来的发展。

0
by

评论者:noprompt

更新为使用新的重构

0
by

评论者:dnolen

这个警告不是我们想要的。相反,我们只需混乱处理并确保属性访问始终有效。

0
by

评论者:dnolen

现在我们有了 CLJS-1620,一个警告似乎是一个很好的答案。

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