gpt4 book ai didi

clojure - 如何根据值序列创建记录

转载 作者:行者123 更新时间:2023-12-03 00:40:23 30 4
gpt4 key购买 nike

例如,我有一个简单的记录定义

(defrecord User [name email place])

制作具有序列值的记录的最佳方法是什么

(def my-values ["John" "john@example.com" "Dreamland"])

我希望有类似的事情

(apply User. my-values)

但这行不通。我最终做了:

(defn make-user [v]
(User. (nth v 0) (nth v 1) (nth v 2)))

但我感觉到有一些更好的方法可以实现这一目标......

最佳答案

警告:仅适用于字面序列!(参见 Mihał 的评论)

试试这个宏:

(defmacro instantiate [klass values] 
`(new ~klass ~@values))

如果您将其扩展为:

(macroexpand '(实例化用户 ["John""john@example.com""Dreamland"]))

你会得到这个:

(新用户“John”“john@example.com”“Dreamland”)

这基本上就是您所需要的。

您可以使用它来实例化其他记录类型或 Java 类。基本上,这只是一个类构造函数,它采用一个参数序列而不是多个参数。

关于clojure - 如何根据值序列创建记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4514196/

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