乐筑天下

搜索
欢迎各位开发者和用户入驻本平台 尊重版权,从我做起,拒绝盗版,拒绝倒卖 签到、发布资源、邀请好友注册,可以获得银币 请注意保管好自己的密码,避免账户资金被盗
查看: 21|回复: 5

[编程交流] 了解李';s.c

[复制链接]

76

主题

312

帖子

254

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
390
发表于 2022-7-5 15:46:51 | 显示全部楼层 |阅读模式
大家好,
 
在尝试学习李·麦克的许多代码时,我偶然发现了这段非常“简单”的代码。。。
 
  1. ;; Active Document  -  Lee Mac
  2. ;; Returns the VLA Active Document Object
  3. (defun LM:acdoc nil
  4.    (eval (list 'defun 'LM:acdoc 'nil (vla-get-activedocument (vlax-get-acad-object))))
  5.    (LM:acdoc)
  6. )

 
为什么这段代码如此“复杂”,它不只是定义为:
  1. (defun LM:acdoc ( / )
  2. (vla-get-activedocument (vlax-get-acad-object))
  3. )

 
因为它似乎返回相同的值??
回复

使用道具 举报

3

主题

16

帖子

14

银币

初来乍到

Rank: 1

铜币
20
发表于 2022-7-5 16:06:56 | 显示全部楼层
嗨,Aftertouch
 
如果已经加载了函数LM:acdoc(可能是一些旧函数),
它将被李的编码LM:acdoc(最新编码)所取代。
 
这是我的理解。
回复

使用道具 举报

66

主题

1552

帖子

1514

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
325
发表于 2022-7-5 16:17:49 | 显示全部楼层
欢迎学习LeeSp
 
我认为李称之为“运行时评估”。关键是第一次调用(LM:acdoc)时会发生什么。
 
以下是控制台上的一些观察结果:
  1. [s]_$ (defun printhello nil
  2. (eval (list 'defun 'printhello 'nil (print "Hello")))
  3. (printhello)
  4. )
  5. PRINTHELLO
  6. _$ (printhello)
  7. [color="red"]"Hello" "Hello"[/color] [color="green"]; !!![/color]
  8. _$ (printhello)
  9. [color="red"]"Hello"[/color]         [color="green"]; now it exits cleanly?[/color]
  10. _$ (printhello)
  11. [color="red"]"Hello"[/color]
  12. _$ (printhello)
  13. [color="red"]"Hello"[/color][/s]

 
  1. [s]_$ (defun printhello nil
  2. (print "Hello")
  3. )
  4. PRINTHELLO
  5. _$ (printhello)
  6. [color="red"]"Hello" "Hello"[/color]
  7. _$ (printhello)
  8. [color="red"]"Hello" "Hello"[/color]
  9. _$ (printhello)
  10. [color="red"]"Hello" "Hello"[/color][/s]

 
除此之外,我的知识是有限的,所以如果有人解释他为什么使用这个会更好。
回复

使用道具 举报

18

主题

1529

帖子

973

银币

中流砥柱

Rank: 25

铜币
649
发表于 2022-7-5 16:30:35 | 显示全部楼层
@Grrr:
也许这有助于解释你的“干净退出”问题:
第一次调用时,Lee的LM:acdoc函数重新定义了自身。新定义直接返回活动文档对象,因此比Aftertouch提出的不太复杂的函数快(分钟)。
回复

使用道具 举报

66

主题

1552

帖子

1514

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
325
发表于 2022-7-5 16:35:57 | 显示全部楼层
罗伊,
 
谢谢-现在我看到我的观察给这带来了更多的困惑。因此,回报没有差异:
  1. _$ (defun test nil
  2. (eval (list 'defun 'test 'nil "return_this_string"))
  3. (test)
  4. )
  5. TEST
  6. _$ (test)
  7. "return_this_string"
  8. _$ (test)
  9. "return_this_string"
  10. _$ (test)
  11. "return_this_string"
  1. 6

 
我会坚持你的信息:
回复

使用道具 举报

76

主题

312

帖子

254

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
390
发表于 2022-7-5 16:55:28 | 显示全部楼层
好的,我们已经解决了这个案子。谢谢你的夸奖!
回复

使用道具 举报

发表回复

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

QQ|关于我们|小黑屋|乐筑天下 繁体中文

GMT+8, 2025-3-14 00:01 , Processed in 0.369233 second(s), 64 queries .

© 2020-2025 乐筑天下

联系客服 关注微信 帮助中心 下载APP 返回顶部 返回列表