乐筑天下

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

[编程交流] Lisp程序技能

[复制链接]

180

主题

639

帖子

463

银币

中流砥柱

Rank: 25

铜币
897
发表于 2022-7-5 15:28:01 | 显示全部楼层 |阅读模式
尝试在这里为一个新项目清理一些代码,并了解我对LISP的使用有多生疏。所以,在我开始真正的问题之前,有人能告诉我为什么这样做有效吗
  1. (defun c:sk (/ dxf ent)
  2.   (defun dxf (code ent)(cdr (assoc code (entget ent))))  
  3. (if (and (setq ent (car (entsel "\nSelect an Attributed Block: ")))
  4.           (eq "INSERT" (dxf 0 ent))
  5.           (= 1 (dxf 66 ent)))
  6.    (while (not (eq "SEQEND" (dxf 0 (setq ent (entnext ent)))))
  7.      (princ (strcat "\n\nAtt_Tag:" (dxf 2 ent) "\nAtt_Value: " (dxf 1 ent)))))
  8. (princ))
但这不是
唯一的区别是,在不工作的版本中,第二个defun在第一个defun之外。我以前在主defun的内部看到过这样的代码,但从未真正理解过。
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-5 15:57:38 | 显示全部楼层
从为c:sk函数声明的局部变量列表中删除dxf,第二个变量也会起作用;将符号dxf声明为本地符号后,在c:sk函数的范围内为该符号分配新内存,符号在评估c:sk函数后恢复其先前的值。
回复

使用道具 举报

66

主题

1552

帖子

1514

银币

后起之秀

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

铜币
325
发表于 2022-7-5 16:19:26 | 显示全部楼层
李描述的代码示例:
  1. (defun C:test ( / fun )
  2. (defun fun ( msg ) (alert msg))
  3. (fun "Im working with the localised 'fun'!")
  4. (princ)
  5. )
  1. (defun C:test ( / )
  2. (fun "Im working with the global 'fun'!")
  3. (princ)
  4. )
  5. (defun fun ( msg ) (alert msg))
  1. (defun C:test ( / fun )
  2. (fun "Im expecting the localised 'fun' you declared and no, I won't use the global one!")
  3. (princ)
  4. )
  5. (defun fun ( msg ) (alert msg))
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-5 16:32:43 | 显示全部楼层
这也可以帮助您理解范围的概念:
  1. 5
在加载并使用(foo)运行上述操作之前,查看是否可以预测输出
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

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

GMT+8, 2025-3-14 00:11 , Processed in 0.444123 second(s), 60 queries .

© 2020-2025 乐筑天下

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