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