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"}
这是为什么?
.setProperty
returns 以前的值,或者 null
如果不存在。由于它在新的 Properties
实例上运行,因此这是 nil
。 (doto x f)
在第一个参数位置用 x
计算 f
,然后 returns x
。在这种情况下,忽略 setProperty
返回的 nil
并返回修改后的 Properties
实例。
第一种形式的计算结果为方法调用的 return 值。
第二种形式在 运行 方法调用之后计算对象实例作为副作用。
以下代码returns无:
(.setProperty (Properties.) "key1" "value1") -> nil
然而,以下内容似乎按预期工作:
(doto (Properties.) (.setProperty "key1" "value1")) -> {"key1" "value1"}
这是为什么?
.setProperty
returns 以前的值,或者 null
如果不存在。由于它在新的 Properties
实例上运行,因此这是 nil
。 (doto x f)
在第一个参数位置用 x
计算 f
,然后 returns x
。在这种情况下,忽略 setProperty
返回的 nil
并返回修改后的 Properties
实例。
第一种形式的计算结果为方法调用的 return 值。
第二种形式在 运行 方法调用之后计算对象实例作为副作用。