利普-克洛斯

  • 时间:
  • 浏览:64
  • 来源:it300
公共Lisp比面向对象编程的发展早了几十年。但是,IT对象方向在后期被合并到其中,定义类defclass宏允许创建用户定义的类。它将类建立为数据类型。它有以下语法−(defclass class name(superclass name*)(slot description*)class option*)slot是存储数据或字段的变量。slot description的形式为(slot name slot option*),其中每个选项都是关键字,后跟名称、表达式和其他选项。最常用的插槽选项是−:access or函数名:initform表达式:initarg符号例如,让我们定义一个具有三个插槽长度、宽度和高度的Box类。(defclass box()(length-width-height)),提供对插槽的访问和读/写控制,除非插槽具有可以访问、读或写的值。o,类是非常无用的。定义类时,可以为每个槽指定访问器。例如,以我们的box类−(defclass box()((length:accessor length)(width:accessor width)(height:accessor height))为例,您还可以为读写插槽指定单独的访问器名称。(defclass box()((length:reader get length:writer set length)(width:reader get width:writer set width)(height:reader get height:writer set height))创建类的实例通用函数make instance创建并返回类的新实例。它有以下语法−(make instance class initarg value*)示例让我们创建一个具有三个槽、长、宽和高的box类。我们将使用三个槽访问器来设置这些字段中的值。创建一个名为main.lisp的新源代码文件,并在其中键入以下代码。现场演示(defclass box()((length:accessor box length)(width:accessor box width)(height:accessor box height))(setf item(make instance'box))(setf(box length item)10)(setf(box width item)10)(setf(box height item)5)(format“方框长度为~d~%”(box length item))(format“方框宽度为~d~%”(box-b)readth item)(格式t“框的高度为~d~%”(box height item))执行代码时,返回以下结果−框的长度为10框的宽度为10框的高度为5定义类方法defmethod宏允许您定义类内的方法。下面的示例扩展了Box类以包含名为volume的方法。创建名为main.lisp的新源代码文件并在其中键入以下代码。实况演示(defclass box()((length:accessor box length)(width:accessor box width)(height:accessor box height)(volume:reader volume));方法计算volume(defmethod volume((object box))(*(box length object)(box width object)(box height object));设置值(setf item(make instance'box))(setf(box length item)10)(setf(box width item)10)(setf(box height item)5);显示值(格式t“框长为~d~%”(box length item))(格式t“框宽为~d~%”(box width item))(格式t“框高为~d~%”(box height item))(格式t“框体积为~d~%”(volume item))执行代码时,它返回以下结果-框的长度为10框的宽度为10框的高度为5框的体积为500 InheritanceLisp允许您根据另一个对象定义对象。这叫做继承。可以通过添加新的或不同的功能来创建派生类。派生类继承父类的功能。下面的示例说明了这一点-示例创建一个名为main.lisp的新源代码文件并在其中键入以下代码。实况演示(defclass box()((length:accessor box length)(width:accessor box width)(height:accessor box height)(volume:reader volume));方法计算volume(defmethod volume((object box))(*(box length object)(box width object)(box height object));木箱类继承box类(defclass wooden box(box)((price:accessor box price));设置值(setf item(make instance'woodbox))(setf(box length item)10)(setf(box width item)10)(setf(box height item)5)(setf(box price item)1000);显示值(format t“木箱长度为~d~%”(box length item))(format“木箱宽度为~d~%”(box brea)dth item)(格式t“木箱高度为~d~%”(箱高项))(格式t“木箱体积为~d~%”(体积项))(格式t“木箱价格为~d~%”(箱价项))执行代码时,返回以下结果-木箱长度为10木箱宽度为10木箱高度为5 volu木箱的我是500,木箱的价格是1000。

猜你喜欢

希腊最高法院批准俄罗斯对比特币嫌疑人的请求

希腊最高法院批准俄罗斯对比特币嫌疑人的请求希腊最高法院上周五表示,一名据称使用比特币数字货币洗钱40亿美元的俄罗斯人应该被引渡到俄罗斯,一位法院消息人士说。AlexanderV

2019-02-01

塑造美国网络防御的创造性破坏和自满情绪

塑造美国网络防御的创造性破坏和自满情绪创造性的破坏,思维的范式转换取代现有的秩序,可能是一个难以捉摸的概念,但它作为人类行为驱动力的力量是不可否认的。在硅谷和其他美国的高层科技

2019-02-01

为什么我(非常)担心PRISM

为什么我(非常)担心PRISM美国国家安全局正在利用我们的数字生活,监控语音电话,电子邮件,社交媒体以及谁知道什么。美国国家安全局方面的人说,这是为了国家安全;它已经停止了恐怖

2019-02-01

先发优势:为什么新的恶意软件最初会打败反恐

先发优势:为什么新的恶意软件最初会打败反恐虽然反病毒解决方案可以有效对抗广泛使用的恶意软件,但是有一个很好的机会,新的恶意软件会躲过那些解决方案。最近有重大安全事件的报告激增,

2019-02-01

台湾银行抢劫与朝鲜黑客有关

台湾银行抢劫与朝鲜黑客有关最近针对台湾一家银行的网络抢劫事件已被安全研究人员联系到一个据信在朝鲜境外活动的臭名昭着的威胁组织。黑客利用SWIFT全球金融网络大致窃取来自台湾远东

2019-02-01