Java Interop:为什么 (.setProperty (Properties.) "key1" "value1") return nil 但将调用包装在 doto 中有效?

Java Interop: Why does (.setProperty (Properties.) "key1" "value1") return nil but wrapping the call in a doto works?

以下代码returns无:

(.setProperty (Properties.) "key1" "value1") -> nil

然而,以下内容似乎按预期工作:

(doto (Properties.) (.setProperty "key1" "value1")) -> {"key1" "value1"}

这是为什么?

.setPropertyreturns 以前的值,或者 null 如果不存在。由于它在新的 Properties 实例上运行,因此这是 nil(doto x f) 在第一个参数位置用 x 计算 f,然后 returns x。在这种情况下,忽略 setProperty 返回的 nil 并返回修改后的 Properties 实例。

第一种形式的计算结果为方法调用的 return 值。

第二种形式在 运行 方法调用之后计算对象实例作为副作用。