gpt4 book ai didi

design-patterns - 构建器模式的 clojure 方式是什么?

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

我们通常在java中使用builder模式,像这样:

UserBuilder userBuilder = new UserBuilder();
User John = userBuiler.setName("John")
.setPassword("1234")
.isVip(true)
.visableByPublic(false)
.build();

有些属性有默认值,有些没有。

在 map 中传递属性可能是一种解决方案,但它会使参数变得更长:
(def john (make-user {:name "John" :pass "1234" :vip true :visible false}))

所以,我的问题是,有没有一种优雅的方法来实现这一目标?

最佳答案

如果要构造一些 clojure 结构,可以在函数参数中使用解构模式。然后,您将实现您已经编写的类似内容。

(defn make-user [& {:keys [name pass vip visible]}]
; Here name, pass, vip and visible are regular variables
; Do what you want with them
)

(def user (make-user :name "Name" :pass "Pass" :vip false :visible true))

我怀疑你能用比这更少的代码做一些事情。

如果你想构造 Java 对象(使用它的 setter),你可以使用 Nicolas 建议的方法。

关于design-patterns - 构建器模式的 clojure 方式是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12633670/

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