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

欢迎!请参阅关于页面以获取更多关于此信息的工作方式的信息。

0
ClojureScript

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

`
(deftype Foo [default])

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

9 个答案

0

评论人:noprompt

修补程序已附上。我应该指出,我必须从编译器命名空间借用js-reserved,警告信息提供了硬编码的munged符号信息,而不是重用编译器的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报告)
...