【问题标题】:How do I pass custom parameter to edn reader?如何将自定义参数传递给 edn 阅读器?
【发布时间】:2019-11-29 00:25:19
【问题描述】:

我遵循clojure代码

(defn reverse-reader [coll]
    (assert (coll? coll) "you can only reverse collections")
    (reverse coll)
)

(def custom-readers {'demo/reverse reverse-reader})

(defn getContent
    [filename myCustomObject]
    (edn/read-string
        {:readers custom-readers}
        (slurp filename))
)

我正在传递以下 EDN 文件

{
    :a 1
    :b [1 2 3 4 5]
    :c #demo/reverse [5 4 3 2 1]
}

我的问题是: 当我调用 (getContent "ednfilepath" myCustomObject) 时,使用 EDN 中定义的集合调用反向阅读器...如何将 myCustomObject 从 getContent 传递给函数反向阅读器?

提前感谢您的帮助。

【问题讨论】:

  • 不清楚您要在这里做什么,您可以在getContent 中使用(reverse-reader myCustomObject) 调用reverse-reader。您想以某种方式将结果与 EDN 输出结合起来吗?
  • 我希望 myCustomObject 在 edn-reader 调用它时传递给反向阅读器...我想将反向阅读器修改为 (defn reverse-reader [coll myCustomObject])

标签: clojure clojure-java-interop edn


【解决方案1】:

根据您的评论,您似乎想向reverse-reader 添加一个参数并在getContent 中创建一个新函数作为标签阅读器:

(defn reverse-reader [coll custom]
  ...)

(defn get-custom-readers [custom]
  {'demo/reverse (fn [c] (reverse-reader c custom))})

(defn getContent
    [filename myCustomObject]
    (edn/read-string
        {:readers (get-custom-readers myCustomObject])
        (slurp filename)))

【讨论】:

    猜你喜欢
    • 2020-06-04
    • 1970-01-01
    • 2021-08-18
    • 1970-01-01
    • 2015-01-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-10-13
    相关资源
    最近更新 更多