Java Interop:为什么(.setProperty(Properties。)“key1”“value1”)返回nil但是在doto中包装调用有效吗?

时间:2016-03-17 16:59:55

标签: clojure clojure-java-interop

以下代码返回nil:

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

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

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

为什么?

2 个答案:

答案 0 :(得分:4)

.setProperty会返回上一个值,如果不存在,则返回null。由于它是在新的Properties实例上运行,因此它是nil(doto x f)在第一个参数位置评估f x,然后返回x。在这种情况下,nil返回的setProperty将被忽略,并返回修改后的Properties实例。

答案 1 :(得分:1)

第一种形式评估方法调用的返回值。

第二种形式在将方法调用作为副作用运行后评估为对象实例。