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

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

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

然而,这违反了对元数据值 _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 的另一个问题关于可变参数,https://dev.clojure.org/jira/browse/CLJS-2446,其建议的实现也解决了这个特定边缘情况。

0

评论者:lilactown

附带补丁

  • meta-fn 辅助函数替换 MetaFn 类型,该函数创建新的 fn
    并具有 IMeta specify! 的。
  • 同时修复了 CLJS-2446:with-meta 对于变量参数函数不起作用
  • 添加了有关元数据和 fn 的测试
0
参考:https://clojure.atlassian.net/browse/CLJS-3018(由lilactown报告)
...