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

欢迎!请参阅关于页面以了解此功能的更多信息。

0
ClojureScript
目前,_IWithMeta_ 通过将函数包装在 _MetaFn_ 类型中来为函数实现。

但是,这破坏了关于元值 _typeof_ 的某些预期


(defn Foo [_] "bar")

(goog/typeOf Foo)
;; => "function"

(goog/typeOf (with-meta Foo {:bar "baz"}))
;; => "object"


此情况不理想的主要情况是当与使用 _typeof_ 进行检查的JS代码交互时,例如React做的那样


(react-is/isValidElementType Foo)
;; => true

(react-is/isValidElementType (with-meta Foo {:bar "baz"}))
;; => false


理想情况下,_with-meta_ 应在可能的情况下保留 _typeof_ 值。

3 个答案

0

评论由:lilactown 发布

存在另一个关于 MetaFn 和 varargs 的问题,https://dev.clojure.org/jira/browse/CLJS-2446,其建议的实现也解决了这个特定的边缘情况。

0

评论由:lilactown 发布

附加补丁

  • meta-fn 辅助程序替换 MetaFn 类型,该辅助程序会创建具有 IMeta 的新 fn
    指定 '。
  • 修复 CLJS-2446:with-meta 不会为可变参数函数工作
  • 添加关于元数据和 fn 的测试
0
参考:https://clojure.atlassian.net/browse/CLJS-3018(由lilactown报告)
...