gpt4 book ai didi

Clojure:多个 let 绑定(bind)

转载 作者:行者123 更新时间:2023-12-03 00:27:33 25 4
gpt4 key购买 nike

在Java中,我通常这样做,

MyObject o1 = new MyObject();
o1.doSomething();
MyObject o2 = new MyObject();
o2.doWith(o1);
MyObject o3 = new MyObject();
o3.doWithBoth(o1, o2);

在 Clojure 中,如果我使用 let 绑定(bind),它可能看起来像,

(let [o1 (create-obj)]
(.doSomething o1)
(let [o2 (create-obj)]
(.doWith o2 o1)
(let [o3 (create-obj)]
(.doWithBoth o3 o1 o2))))

代码向右侧增长,这很丑陋且难以维护。有更好的方法吗?

最佳答案

(let [o1 (doto (create-obj) (.doSomething))
o2 (doto (create-obj) (.doWith o1))
o3 (doto (create-obj) (.doWithBoth o1 o2))]
...)

有关详细信息,请参阅(doc doto)

(更新:) 这是可行的,因为在每种情况下,您调用方法的都是新创建的对象。相反,如果您想调用一个函数/方法,并将新创建的对象传递到第一个参数位置以外的参数位置,那么您可能最好使用由noisesmith描述的 _ 技巧。您可以将 dotoas-> 一起使用。后者的优点是不引入不会被清除的未使用的局部变量(上次我检查 Clojure 仅清除了后续代码中实际引用的局部变量),但如果您调用 ,这当然没有任何后果void-返回副作用的方法。

关于Clojure:多个 let 绑定(bind),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21915206/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com