CLO for Clojure?

Eri*_*ndt 24 lisp oop clojure common-lisp clos

是否存在Clojure的CLOS(Common Lisp Object System)之类的东西?

cem*_*ick 18

您是否考虑过Clojure的数据类型(特别是defrecord),协议多方法?在这些机制之上,所有这三个在Clojure中总是比CLOS的端口更加惯用.

  • 再说一遍,如果我们都倾听有人说"不要这样做,那就是愚蠢",史蒂夫罗素可能会听约翰麦卡锡并且从不手工编写他的'评估',我们可能永远不会在计算机上使用Lisp所有.因此开始了Lisp黑客的悠久历史,他们不尊重别人说的正确的事情!所以我说,去吧,把CLOS移植到Clojure,然后看看会发生什么.真的,可能发生的最坏情况是什么?:-) (30认同)
  • 我不是说,"不要重新实现CLOS".我只是说,在尝试像牛一样对待马之前,至少应考虑语言核心所提供和支持的设施.现在,如果一个人勇敢(/愚蠢?),各种对象系统可以建立在这些核心设施之上:如果一个人如此积极,肯定会有CLOS,也可能是更先进的路径. (7认同)

Jör*_*tag 17

Clojure本身没有对象系统,原因有两个:

  1. Clojure专门设计为托管在面向对象的平台上,然后简单地吸收底层平台的对象系统.即ClojureJVM具有JVM对象系统,ClojureCLR具有CLI对象系统,ClojureScript具有ECMAScript对象系统,等等.
  2. Rich Hickey讨厌物体.

但是,您显然可以在Clojure中实现一个对象系统.毕竟,Clojure是Turing-complete.

Mikel Evins正在研究一种新的OO方法,他称之为类别.他有几个Lisps的实现,包括Clojure(虽然不是所有的端口都保证一直都是最新的).

类别正在慢慢地被Bard所包含,这是Mikel正在设计的一种新的Lisp方言,其中内置了类别.(然后,反过来,它可能成为Closos的实现语言,是Mikel关于如何设计操作系统的一个想法. )

  • "Rich Hickey讨厌物体." 我的理解是,Lisp家族的"美女"之一是程序员可以将语言扩展到她想要的任何东西,即使原作者没有(或不批准:-)).我很高兴看到Rich有一个很棒的语言设计,但我敢打赌他会同意允许用户添加一个完整的对象系统是Clojure(或任何Lisp)的优势之一. (5认同)

nic*_*kik 12

Clojure没有CLOS,也不想要CLOS,但你可以实现它.

Clojure希望是不可变的,所以有可变的OO会有点愚蠢,但你可以有一种OO.

有了这三件事,您应该能够满足您的所有需求,但大多数时候,最好只使用普通函数和标准数据结构.