乐筑天下

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

[编程交流] 定义生成的变量loc

[复制链接]

16

主题

69

帖子

54

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
80
发表于 2022-7-5 15:50:06 | 显示全部楼层 |阅读模式
我一直在尝试通过代码生成变量,而不是手动定义它们。问题是,当程序创建它们时,它们被定义为全局变量。有没有办法将它们生成为局部变量?
 
下面是我为测试它而编写的示例代码。
 
  1. ;ListToVariables creates variables named testvar0, testvar1, testvar2, etc.
  2. ;Each newly created variable contains the contents of the correlated slot from testlist.
  3. (defun c:test ( / testlist )
  4. (setq testlist (list "aaa" "bbb" "ccc" "ddd" "eee"))
  5. (ListToVariables testlist)
  6. )
  7. (defun ListToVariables ( listname / i )
  8. (setq i 0)
  9. (repeat (length listname)
  10.         (set (read (strcat "testvar" (rtos i 2 0))) (nth i listname))
  11.         (setq i (1+ i))
  12. )
  13. (princ)
  14. )
回复

使用道具 举报

26

主题

1495

帖子

20

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
118
发表于 2022-7-5 16:23:48 | 显示全部楼层
你可以,但这是RPIA
 
最好是对这些类型使用标准名称约定,这些类型将仅用于该会话
 
我使用前缀gv_表示全局变量,并设置为可重用,tv_表示临时变量
 
-大卫
回复

使用道具 举报

16

主题

69

帖子

54

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
80
发表于 2022-7-5 16:46:40 | 显示全部楼层
 
这很有道理,而且听起来我可能不得不走这条路。出于好奇,我仍然对如何生成局部变量感兴趣。如果有人有任何例子,或者有任何描述它的文档的链接,我很乐意去看看。我现在能想到的唯一方法是把它写成一个中间程序,它编写自己的函数,在本地声明变量。
回复

使用道具 举报

66

主题

1552

帖子

1514

银币

后起之秀

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

铜币
325
发表于 2022-7-5 17:02:17 | 显示全部楼层
大概
 
  1. ; (ListToVariables "hello" '(44 55 88))
  2. (defun ListToVariables ( pref L / varnm i r )
  3. (setq i 0)
  4. (foreach x L
  5.    (set (read (setq varnm (strcat pref (itoa (setq i (1+ i)))))) x)
  6.    (setq r (cons varnm r))
  7. )
  8. (reverse r)
  9. )

 
  1. (ListToVariables "hello" '(44 55 88)) >> ("hello1" "hello2" "hello3")
  2. hello1 >> 44
  3. hello2 >> 55
  4. hello3 >> 88
  5. hello4 >> nil
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

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

GMT+8, 2025-3-14 13:08 , Processed in 3.945889 second(s), 60 queries .

© 2020-2025 乐筑天下

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