问题标签 [clos]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
3 回答
282 浏览

php - CLOS 类似于 PHP 的对象模型

我从Moose回到了 php 开发,我真的很想念 CLOS,比如 php 的对象模型。是否有某种语法糖可以让我在处理对象时在 php中编写更少的代码?

只是为了更加强调这一要求。我不想在几个地方写一件事。我可以忍受自动生成的部分代码,但是在我必须看到开发的代码中,我不想看到只是混乱的冗余信息(想想:如果你真的需要更多类比的话:LISP 宏)。因此,如果这更有意义的话,这部分也可以称为 DSL。

我希望至少有一些角色(mixins),以及某种内省,而无需重新发明轮毂。代码生成器和自动加载器可能是至少部分解决此问题的一种方法。

ps 对于 JavaScript,有Joose,所以类似的 API 会非常有用。

0 投票
5 回答
698 浏览

lisp - 尝试学习:LISP 中的对象重定向和泛型函数!

由于另一个问题,我正在阅读 Practical common Lisp 。

我刚刚阅读了第 16 章和第 17 章,您可以在其中了解 LISP 如何管理对象。但是经过几年思考 Java 如何管理对象后,我似乎无法真正理解如何使用 CLOS 在 LISP 中实现更大的体系结构。

因此,我要求你们阅读 20 到 50 页的关于 CLOS 应用于更大架构而不是简单示例的内容。也许是几篇博文,甚至是经验!

0 投票
2 回答
362 浏览

lisp - 类中的 lisp 文件指针

在理解类中处理文件访问的 CLOS 方式时,我遇到了一个问题。在 C++ 中,我可以做到这一点:

我想指出的是 PraseData() 将被多次调用,每次都会从文件中解析一个新的数据块,并且 my_data 将被更改。

我正在尝试在 CLOS 中执行相同的技巧 - 创建所有通用方法来解析数据、加载文件、读取标题等,以及我拥有的类定义:

在“构造函数”(即初始化实例)中,我打开文件就像我的 c++ 习惯用法一样。然后我可以访问数据,并且可以像以前一样解析数据。但是,有人告诉我,使用“析构函数”或(finalize)方法来关闭文件不是惯用的 CLOS 来处理这种我需要文件存在的情况,以便我可以在我的数据文件之外访问它方法。

我将定义一个加载数据文件的函数,然后对其数据执行一系列分析,然后希望将其关闭。有什么方法可以做到这一点?(我假设宏或某种类型的闭包可以在这里工作,但我对 lisp 方式不够熟悉来决定需要什么或如何实现它)。

0 投票
2 回答
2574 浏览

lisp - 什么时候使用 initform?

我正在为分子动力学方面的一些工作组建一个班级,如下所示:

最初,我认为我可以以某种方式使用 initform 即(getmass 名称)来引用类定义中的其他插槽 - 但事实证明这是不正确的(或者是这样吗?!?)。相反,我被告知 initialize-instance 将是放置所有初始化内容的地方......足够公平。

那么,我的问题是什么时候使用 :initform ?惯用的偏好是什么?我已经看到它如上所述用于生成(错误“...”)代码,并且还用于在未提供 :initarg 时初始化默认参数。但是这两个都可以很容易地适应初始化实例,并且在那里可能更有意义。有没有特别的方法 :initform 通常被使用?

0 投票
1 回答
687 浏览

lisp - Common Lisp 中的跨包defgeneric/defmethod?

在包 A 中定义泛型并在 CLOS 中为包 B 中的泛型提供方法的正确方法是什么?

先感谢您!

例子:

0 投票
3 回答
543 浏览

lisp - 在 Allegro CL 中更改可编辑文本值

我正在尝试通过单击默认按钮来更改 Allegro CL(版本 8.0.1)中可编辑文本控件的值。

我读过(setf value)但没有找到任何例子。

我附加到点击事件的功能如下

如您所见,那里缺少代码:) 我尝试了各种方法(setf (slot value :txt 'value) 'TEXT)(setf value 'TEXT)但均无济于事。

表单上的 dialog-items 插槽是一个列表,其中包含以下元素

有什么帮助吗?提前致谢。

0 投票
2 回答
511 浏览

common-lisp - 使用 change-class 从数字创建多项式对象

我已经按照 SICP 2.5.3 中描述的方式编写了一个多项式类(使用 defclass 除外)。我希望能够无缝地添加和乘以多项式和常规数字,但我不能让 change-class 接受一个数字。

我试图通过将类从整数更改为浮点数来简化问题:

但这给了我错误:

我从(fyi)收到相同形式的错误:

我将继续执行手动转换,但我更喜欢使用内置的 clos 工具。

正如 Xach 指出的那样,我可以使用强制或浮点数将 4 更改为浮点数。这旨在作为我尝试做的一个更简单的示例,并消除我的 update-instance-for-different-class 错误的任何可能性。

这是我尝试过但不起作用的较长版本:

我仍然收到类似上面示例的错误:

0 投票
1 回答
290 浏览

macros - 如何编写(简单)宏?

我需要为(with-hooks (monster method who what) &body body)我正在编写的游戏编写一个宏。Monster 是一个 CLOS 对象、方法和字符串,什么是函数(#' 符号)。宏观扩张的效果是

完全不知道如何编写这样的宏,我将不胜感激。我有一种令人毛骨悚然的感觉,这很容易而且我有点无知。

0 投票
2 回答
697 浏览

lisp - 在 common lisp 中测试一个类是否是另一个类的子类

如何查看一个 CLOS 类是否是另一个 CLOS 类的子类?

0 投票
1 回答
3153 浏览

serialization - 使 clos 对象在 lisp 中可打印

如果你想让普通 lisp 中的 CLOS 对象可打印(打印可读),你如何在不使用任何东西但打印和读取的情况下做到这一点。