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-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

附件补丁

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