装饰器并不是一种数据结构。它仅仅是为了让某些代码更易于阅读而实现的一种不必要的语法糖,仅此而已。
除非您依赖于全局变量或引入其他引用模糊性,否则您无法在运行时使用它们来更改某个内容。
话虽如此,在将函数视为一等公民的任何语言中,都有一种方法可以实现完全相同的功能,但可能没有某些特殊糖。
您链接的教程给出了以下示例
@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))