问题标签 [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.
php - CLOS 类似于 PHP 的对象模型
我从Moose回到了 php 开发,我真的很想念 CLOS,比如 php 的对象模型。是否有某种语法糖可以让我在处理对象时在 php中编写更少的代码?
只是为了更加强调这一要求。我不想在几个地方写一件事。我可以忍受自动生成的部分代码,但是在我必须看到开发的代码中,我不想看到只是混乱的冗余信息(想想:如果你真的需要更多类比的话:LISP 宏)。因此,如果这更有意义的话,这部分也可以称为 DSL。
我希望至少有一些角色(mixins),以及某种内省,而无需重新发明轮毂。代码生成器和自动加载器可能是至少部分解决此问题的一种方法。
ps 对于 JavaScript,有Joose,所以类似的 API 会非常有用。
lisp - 尝试学习:LISP 中的对象重定向和泛型函数!
由于另一个问题,我正在阅读 Practical common Lisp 。
我刚刚阅读了第 16 章和第 17 章,您可以在其中了解 LISP 如何管理对象。但是经过几年思考 Java 如何管理对象后,我似乎无法真正理解如何使用 CLOS 在 LISP 中实现更大的体系结构。
因此,我要求你们阅读 20 到 50 页的关于 CLOS 应用于更大架构而不是简单示例的内容。也许是几篇博文,甚至是经验!
泰
lisp - 类中的 lisp 文件指针
在理解类中处理文件访问的 CLOS 方式时,我遇到了一个问题。在 C++ 中,我可以做到这一点:
我想指出的是 PraseData() 将被多次调用,每次都会从文件中解析一个新的数据块,并且 my_data 将被更改。
我正在尝试在 CLOS 中执行相同的技巧 - 创建所有通用方法来解析数据、加载文件、读取标题等,以及我拥有的类定义:
在“构造函数”(即初始化实例)中,我打开文件就像我的 c++ 习惯用法一样。然后我可以访问数据,并且可以像以前一样解析数据。但是,有人告诉我,使用“析构函数”或(finalize)方法来关闭文件不是惯用的 CLOS 来处理这种我需要文件存在的情况,以便我可以在我的数据文件之外访问它方法。
我将定义一个加载数据文件的函数,然后对其数据执行一系列分析,然后希望将其关闭。有什么方法可以做到这一点?(我假设宏或某种类型的闭包可以在这里工作,但我对 lisp 方式不够熟悉来决定需要什么或如何实现它)。
lisp - 什么时候使用 initform?
我正在为分子动力学方面的一些工作组建一个班级,如下所示:
最初,我认为我可以以某种方式使用 initform 即(getmass 名称)来引用类定义中的其他插槽 - 但事实证明这是不正确的(或者是这样吗?!?)。相反,我被告知 initialize-instance 将是放置所有初始化内容的地方......足够公平。
那么,我的问题是什么时候使用 :initform ?惯用的偏好是什么?我已经看到它如上所述用于生成(错误“...”)代码,并且还用于在未提供 :initarg 时初始化默认参数。但是这两个都可以很容易地适应初始化实例,并且在那里可能更有意义。有没有特别的方法 :initform 通常被使用?
lisp - Common Lisp 中的跨包defgeneric/defmethod?
在包 A 中定义泛型并在 CLOS 中为包 B 中的泛型提供方法的正确方法是什么?
先感谢您!
例子:
lisp - 在 Allegro CL 中更改可编辑文本值
我正在尝试通过单击默认按钮来更改 Allegro CL(版本 8.0.1)中可编辑文本控件的值。
我读过(setf value)
但没有找到任何例子。
我附加到点击事件的功能如下
如您所见,那里缺少代码:) 我尝试了各种方法(setf (slot value :txt 'value) 'TEXT)
,(setf value 'TEXT)
但均无济于事。
表单上的 dialog-items 插槽是一个列表,其中包含以下元素
有什么帮助吗?提前致谢。
common-lisp - 使用 change-class 从数字创建多项式对象
我已经按照 SICP 2.5.3 中描述的方式编写了一个多项式类(使用 defclass 除外)。我希望能够无缝地添加和乘以多项式和常规数字,但我不能让 change-class 接受一个数字。
我试图通过将类从整数更改为浮点数来简化问题:
但这给了我错误:
我从(fyi)收到相同形式的错误:
我将继续执行手动转换,但我更喜欢使用内置的 clos 工具。
正如 Xach 指出的那样,我可以使用强制或浮点数将 4 更改为浮点数。这旨在作为我尝试做的一个更简单的示例,并消除我的 update-instance-for-different-class 错误的任何可能性。
这是我尝试过但不起作用的较长版本:
我仍然收到类似上面示例的错误:
macros - 如何编写(简单)宏?
我需要为(with-hooks (monster method who what) &body body)
我正在编写的游戏编写一个宏。Monster 是一个 CLOS 对象、方法和字符串,什么是函数(#' 符号)。宏观扩张的效果是
我完全不知道如何编写这样的宏,我将不胜感激。我有一种令人毛骨悚然的感觉,这很容易而且我有点无知。
lisp - 在 common lisp 中测试一个类是否是另一个类的子类
如何查看一个 CLOS 类是否是另一个 CLOS 类的子类?
serialization - 使 clos 对象在 lisp 中可打印
如果你想让普通 lisp 中的 CLOS 对象可打印(打印可读),你如何在不使用任何东西但打印和读取的情况下做到这一点。