【问题标题】:Define my own reader macro in clojure在 clojure 中定义我自己的阅读器宏
【发布时间】:2013-12-19 08:50:16
【问题描述】:

我想在 clojure 中定义我自己的阅读器宏:

(read-string "ßfoo")
=> (some_func :foo)

有可能吗?

【问题讨论】:

    标签: clojure clojurescript


    【解决方案1】:

    可以通过在类路径顶部的data_readers.clj 中使用阅读器映射来创建标记文字。

    这必须在类路径顶部的data_readers.clj 中(通常是src 目录)。

    {ß reader-demo.core/read-fn}
    

    这进入 reader-demo.core

    (defn some-func
      [arg]
      (str "some-func invoked with " arg))
    
    (defn read-fn
      [arg]
      (-> arg
          keyword
          some-func))
    

    调用

    #ß foo
    

    会回来

    "some-func invoked with :foo"
    

    这里描述了这种技术:The reader: Tagged literals

    请注意,实际上您应该为您的标记文字命名,因为所有非命名空间的文字都是为 Clojure 本身保留的。

    【讨论】:

      【解决方案2】:

      目前,Clojure 不允许创建用户定义的阅读器宏。这在未来可能/可能不会改变。

      【讨论】:

        猜你喜欢
        • 2011-09-19
        • 1970-01-01
        • 2015-12-03
        • 1970-01-01
        • 1970-01-01
        • 2013-08-29
        • 2023-02-04
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多