将 Java 方法调用链接和对象构造转换为普通 Clojure

Translate Java method invocation chaining and object construction to normal Clojure

Java 中链接方法调用的 Clojure 等价物是什么?

TokenOptions tokenOpts = new TokenOptions.Builder()
      .role(Role.MODERATOR)
      .expireTime((System.currentTimeMillis() / 1000) + (7 * 24 * 60 * 60)) // in one week
      .data(connectionMetadata)
      .build());

此代码复制自 https://tokbox.com/opentok/tutorials/create-token/java/

第一步:将左括号向左移动一个标记,添加一个doto链接方法应用程序:

(def tokenOpts (doto (TokenOptions/Builder)
                     (.role Role.MODERATOR)
                     (.expireTime (System.currentTimeMillis() / 1000) + (7 * 24 * 60 * 60)) // in one week
                     (.data connectionMetadata)
                     (.build));

然后 "recur" 每个方法的参数:

(def tokenOpts (doto (TokenOptions/Builder)
                     (.role Role/MODERATOR)
                     (.expireTime (+ (System.currentTimeMillis() / 1000) 
                                  (7 * 24 * 60 * 60)) // in one week
                     (.data connectionMetadata)
                     (.build));

然后 "recur" 到这些函数的参数(请注意,我在这里切换到函数这个词,因为此时我们已经脱离了 Java 思维模式:

(def tokenOpts (doto (TokenOptions/Builder)
                     (.role Role/MODERATOR)
                     (.expireTime (+ (/ (System/currentTimeMillis) 1000) 
                                     (* 7 24 60 60))) ;; in one week
                     (.data connectionMetadata)
                     (.build))

您需要将 (:import .....) 添加到您的命名空间声明(文件顶部的块),以确保您在这些声明下可以使用 Roll 和 TokenOptions 类名字。