装饰器不是一种数据结构。它是一种不必要的语法糖,只是为了使某些代码更容易阅读而实现的,仅此而已。
而且您无法使用它来改变运行时中的某些内容,除非您依赖于一些全局变量或引入其他引用的不透明性。
话虽如此,任何将函数视为一等公民的语言都有一种方法可以以相同的方式实现相同的功能,也许没有特殊糖衣。
您链接的教程给出了以下示例
@split_string
@uppercase_decorator
def say_hi():
return 'hello there'
在 Clojure 中实现它的最相似方式可能是这样的
(def say-hi (comp
split-string
uppercase-decorator
(fn [] "hello there")))
尽管我只想把它全部包装在一个函数中,这在Clojure中要简单得多,因为Clojure中没有任何地方会出现像Python那样的 return
语句
(defn say-hi []
(-> "hello there"
uppercase-decorator
split-string))