明经通道 发表于 2012-11-14 21:56:42

第十章 使用名称空间 (一) 名称空间范围

第十章 使用名称空间
开发Visual LISP VLX应用程序可以使用独立名称空间来提供更多的性能控制和更好的安全性。但是,这样也会增加成本,因为需要修改编码以避免相关问题及提供合适的结果。这包括输入输出的函数和符号,还有在本地名称空间传入和传出数值。
独立名称空间VLX应用程序是相对孤立的。在需要时,它们也可以被查询或卸载,不象普通的LISP函数,它们被加载到文件的名称空间后,是无法通过名称被识别和卸载的。这就很象ObjectARX应用程序,它为开发者提供了更多的性能,它在Visual LISP出现前的LISP时代是没有的。

图10-1 名称空间关系图

I在ActiveX或COM(组件对象模型)的开发中,Windows中的每一个应用程序通常都是运行在其各自的名称空间。这是多重任务下常见的东西。由指定的应用程序启动的其它过程可能会也可能不会在应用程序的名称空间中运行。实际上它们可能在其各自隔离的名称空间中运行。这样做有许多优点,但同时也会有些缺点。

参看图10-1,我们可以用一些人的例子来说明名称空间是如何工作的,以及它们的行为过程如何。这两个在Document名称空间运行的VLX应用程序均运行在其各自的名称空间。这会有些费解,因为它们并不是真正运行在Document名称空间内,而实际上是运行在AcadApplication名称空间内。因为它们被加载到Document名称空间,所以他们也只在这个Document名称空间被引用。第三个VLX不是独立名称空间应用程序,它完全在Document名称空间中运行,这和那些传统的AutoLISP应用程序一样。

名称空间范围
注意本例中,有三个名为Bob的对象(函数定义)。虽然每个都被加载到相同的Document名称空间,但它们彼此间看不到也不会互相影响。某种意义上这个结果就象有三个各不相同的Bob对象,有点象Bob Smith、Bob Jones和Bob Doe。除非你使用一些特殊的Visual LISP函数,否则它们根本无法互相沟通也不能彼此影响。所以在这个Document中涉及到Bob对象的任何对象只能有权使用和它们在同一名称空间的对象。

对于使用过的全局符号,道理也是一样的。如果在Document会话中的命令行设置给G$BOB符号设置数值“A”,那任何在VLX1或VLX2中运行的G$BOB符号都不会受到影响。在VLX1中的函数,我们可以指定G$BOB的数值为“B”。如果在VLX1中函数显示(princ G$BOB),它将返回“B”。但从命令提示符对(princ G$BOB)的请求将返回“A”。

这类保护的结果通常被称作私有函数或私有符号。因为它们对于VLX名称空间是私有的。然而在Document名称空间中被定义的函数和符号,却不是私有的,因为它们对于在名称空间运行的所有应用程序都是可访问的。更准确的说,私有和公共是相对于其调用过程所处的位置而言(在各自名称空间的内部或外部)。换句话说,Sue对象对于在VLX2名称空间中定义和运行的任何函数来说都是公共的。但对于VLX1来说,Sue就是私有的,默认情况下其它名称空间不能访问到它。



http://bbs.mjtd.com/xwb/images/bgimg/icon_logo.png 该贴已经同步到 明经通道的微博

smartstar 发表于 2012-11-14 21:57:19

再来抢个沙发!

zyhandw 发表于 2012-11-29 09:02:07

又有新东西了

ltrliu 发表于 2015-8-11 14:54:26

新人学习中

zjh2785 发表于 2017-10-12 15:43:09

这一章不是很懂
页: [1]
查看完整版本: 第十章 使用名称空间 (一) 名称空间范围