gpt4 book ai didi

javascript - 在 clojurescript 中扩展 deftype 的构造函数

转载 作者:行者123 更新时间:2023-11-29 17:17:04 25 4
gpt4 key购买 nike

在 clojurescript 中通过 deftype 创建类型时:

(deftype SomeObject [a b c]
Object
(update [_]
(set! (.-a _) 5)
(set! (.-b _) 6) ))

是否有可能扩展构造函数?我想在创建对象时对其进行一些初始化!

最佳答案

deftype中不支持那个,不; Clojure(Script) 等效项是定义一个工厂函数,也许是 make-some-object,然后使用它代替实际的构造函数。有关示例和基本原理,请参阅 amalloy 的回答。

当然,在 JavaScript 中,构造函数只是简单的函数,您当然可以使用 ClojureScript 来定义一个函数,它将像 JS 构造函数一样工作:

;; "constructor" with default field values
(defn Point [x y]
(this-as this
(set! (.-x this) (if x x 10)) ; NB. Clojure truth semantics are used
(set! (.-y this) (if y y 20))))

(.-x (Point. 2))
;= 2
(.-y (Point. 2))
;= 20

这有点违背语言的整体精神,因此除非在特殊情况下,否则是不可取的。 (与期望构造函数作为参数的 JS API 互操作?)

关于javascript - 在 clojurescript 中扩展 deftype 的构造函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16621671/

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