是否有Clojure等效于Ruby的#tap方法

Is there a Clojure equivalent of Ruby's #tap method

Ruby提供了#tap方法,该方法允许您接收变量并在其上运行代码,但随后返回原始变量而不是表达式的结果,即:

1
2
3
def number
  5.tap { |x| print x }   # Prints 5, and returns 5
end

Clojure中是否内置可以提供此功能的功能?


您正在寻找doto。这是您的示例,使用它重写:

1
2
(doto 5
  println)

它与->宏的工作方式相似,因为它通过一系列函数传递值。一个主要区别是它返回您传入的初始值,而不是最终函数返回的值。