- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我遇到过这样的说法,即 Common Lisp 对象系统 (CLOS) 优于传统的(基于类的)面向对象系统。 Wikipedia entry for CLOS提到了这两种方法之间的差异——主要是多重分派(dispatch)以及 CLOS 中的类和方法的分离。这些仅仅是CLOS的差异还是真正的优势?
最佳答案
取决于你认为什么是优势。
首先 CLOS 是一个基于类的对象系统,与基于非类的面向原型(prototype)的对象系统相比。 CLOS 具有多重继承的类。 CLOS 对象是类的实例。
CLOS 不使类命名空间。 CLOS 也不让方法驻留在类和这些类的命名空间中。
这意味着 CLOS 不是消息传递 OO .不将消息传递给某个对象,然后该对象运行相应的方法。
历史上早期的 Lisp 对象系统(CLOS 就是从该系统开发的)开始是传统的基于类的消息传递系统(LOOPS,Flavors)。经过几年的实验和研究,CLOS 模型被认为更适合 Lisp 并且更强大。
CLOS 使用通用函数模型 ,其主要优点是它更适合函数式编程范式。 CLOS 使用泛型函数的函数调用。泛型函数可以有多个参数,并且可以调度多个参数。
这适用于 Common Lisp 的其余部分,因为其他函数也可以有多个参数。 CLOS 泛型函数也可以传递、从函数返回或存储在数据结构中。所以它们也是一流的功能。如果你发现这些东西(高阶函数和多重分派(dispatch))有用,那么 CLOS 就有优势。此外,CLOS 通用函数本身就是 CLOS 对象。
有几件事与其他基于类的 OO 系统不同——上面已经提到了每个类没有命名空间以及方法不是按类组织的。由于 CLOS 不是消息传递 OO,因此将发送到某个对象的所有消息转发到另一个对象并不适用 - 如果没有消息传递,我们将无法转发不存在的消息。
一个明显的可能优势是,由于 CLOS 类不捆绑方法,并且方法可以单独定义,因此类和方法集不是封闭的。可以随时添加或删除新方法。这意味着对于新的或更改的功能,不需要源代码,以某种方式“重新打开”一个类,甚至子类化一个类来将新功能添加到子类中。所有这些在 CLOS 中都是不必要的。
其他一些可能的优势:
关于oop - CLOS 相对于其他基于类的 OO 系统的优势,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5066355/
首先对WCF与WebService的定义进行概括,接着介绍了WCF的优势,最后就是对WCF与WebService两者的根本区别进行比较,具体内容如下 1、定义 1.WebService:严格来
关闭。这个问题是opinion-based .它目前不接受答案。 想改善这个问题吗?更新问题,以便可以通过 editing this post 用事实和引文回答问题. 5年前关闭。 Improve t
关闭。这个问题是opinion-based .它目前不接受答案。 想要改进这个问题? 更新问题,以便 editing this post 可以用事实和引用来回答它. 关闭 8 年前。 Improve
谁能告诉我将下一个脚本标记放在 元素之后和将它放在 元素之前有什么好处? (function (){ var script = document.createElement("script"); s
我最近遇到了一个 JavaScript 脚本,其中作者似乎试图避免在代码中使用字符串并将所有内容都分配给一个变量。 所以代替 document.addEventListener('click', (e
Scott Meyers 在“Effective Modern C++”中说表达式 Matrix sum = m1 + m2 + m3 + m4 (其中所有对象的类型均为 Matrix)“如果 ope
按照目前的情况,这个问题不适合我们的问答形式。我们希望答案得到事实、引用或专业知识的支持,但这个问题可能会引发辩论、争论、投票或扩展讨论。如果您觉得这个问题可以改进并可能重新打开,visit the
免责声明:我是网络开发的新手,所以请多多包涵... 堆栈:Angular 前端,后端的 Tornado(基于 python)网络服务器 我一直在使用 RxJs 和 WebSocket 成功地与后端通信
我一直在调查我的 Flutter 应用程序的 JSON 解析,并且有一个关于我无法解决的工厂构造函数的问题。我试图了解使用工厂构造函数与普通构造函数的优势。例如,我看到很多 JSON 解析示例,它们使
添加 SQL 后尝试打开 TadsQuery 时出现 5400 AE_INTERNAL_ERROR。当我将相同的 SQL 直接放在 TadsQuery 中时,没有错误。您的帮助文件指示我联系 Adva
关闭。这个问题是opinion-based .它目前不接受答案。 想改进这个问题?更新问题,以便 editing this post 可以用事实和引用来回答它. 8年前关闭。 Improve this
关闭。这个问题是opinion-based .它目前不接受答案。 想要改进这个问题? 更新问题,以便 editing this post 可以用事实和引用来回答它. 关闭 9 年前。 Improv
我想定义一个函数,当给定一个整数时,它将返回一个字符串。像这样: # Pseudocode function get_string(i) return my_string_array[i] end
我曾尝试在 Linux 和 Windows 上使用 DBD::Advantage,但没有成功。 Windows 版本附带了一个看似完整的安装程序,但它留下了 DBD-Advantage-8.10.ta
为什么说 NoSQL 在结构上比某些 SQL 数据库更快?假设我在某个 SQL 表的列上添加了一些索引。有人可以提供某种更快的查询吗? 我正在阅读有关 redis 的内容。 class User <
我的问题很简单:如果接口(interface)由单个类实现,那么使用接口(interface)有什么好处吗? 我一直认为只有当该接口(interface)有多个实现时,接口(interface)才是好
考虑这些(或多或少)等价的类型签名: f1 :: [a] -> Int -> a f2 :: Integral b => [a] -> b -> a f2 比 f1 更通用,这是一个很大的优势,但是
我们在 Scala 中部分应用了函数- def sum(a:Int,b:Int,c:Int) = a+b+c val partial1 = sum(1,_:Int,8) 我想知道使用部分应用函数的优点
你看下面的代码,我是如何使用 session 变量的;所以这三个问题是: 它们存放在哪里? (服务器或客户端) 它们对于每个网页访问者来说都是独一无二的吗? 我可以在完成工作后使用 ajax 或简单的
我知道这是一个常见问题,互联网上有关于此主题的资源,但我想从这个社区了解每个人在部署博客时对子域与子文件夹的想法(SEO 优势)。 谢谢。 最佳答案 我研究过一次,根据社区反馈以及权衡利弊,我会说去一
我是一名优秀的程序员,十分优秀!