明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 678|回复: 10

[讨论] 中文变量名赋值冲突

[复制链接]
发表于 2025-7-19 20:31:12 | 显示全部楼层 |阅读模式
本帖最后由 zgs378530220 于 2025-7-19 20:33 编辑

    1. (foreach x '("背部竖杆" "走道前杆" "走道连杆" "走道后杆" "顶部前杆" "顶部连杆" "顶部后杆" "底部前杆" "底部连杆" "底部后杆")  (set (read x) 第一背条))         
    2. (foreach x '("走道斜杆" "走道踏杆" "第二背条")  (set (read x) ""))
    复制代码

  • 请问在lisp中怎么避免中文错乱,以上变量底部后杆被识别为走道斜杆;
  • 如果改为英文,就能正确赋值,但是变量名我有用于DCL的label值。

回复

使用道具 举报

发表于 2025-7-19 20:34:00 | 显示全部楼层
“变量名我有用于DCL的label值”让数值顺序和LABEL顺序一致就行了
回复 支持 反对

使用道具 举报

 楼主| 发表于 2025-7-19 20:52:05 来自手机 | 显示全部楼层
llsheng_73 发表于 2025-7-19 20:34
“变量名我有用于DCL的label值”让数值顺序和LABEL顺序一致就行了

我先定义了“底部后杆”这个变量,但是竟然识别为“走道斜杆”的值,用read来赋值,会出现这个问题,之前是直接(setq 底部后杆 第一背条)就正常显示,
回复 支持 反对

使用道具 举报

 楼主| 发表于 2025-7-19 20:53:52 来自手机 | 显示全部楼层
不知道是不是read解析的问题
回复 支持 反对

使用道具 举报

发表于 2025-7-19 21:53:04 | 显示全部楼层
汉字会被转码识别,而汉字又会被分解为两个hex,所以,如果汉字变量的第一个hex落在同一个区,变量的指针会相互覆盖,这也是为啥不推荐用汉字做变量。
回复 支持 反对

使用道具 举报

发表于 2025-7-20 03:10:21 | 显示全部楼层
zgs378530220 发表于 2025-7-19 20:52
我先定义了“底部后杆”这个变量,但是竟然识别为“走道斜杆”的值,用read来赋值,会出现这个问题,之前 ...

关于中文符号的使用问题,有好几篇帖子都提到过,都是建议要尽可能避免。
这里同样不建议试图解决中文符号的问题,而是建议换一个思路:首先,dcl的label不宜作为变量,建议用key更直观也更直接,毕竟对控件的操作都是通过key来实现的,比如赋初值,确定后取得各个控件的值,修改关联控件的状态等;另外,对相关的key的初值可以用一个表来包含它们,不管是对变量赋值还是初始化控件都很方便
比如(mapcar'set_tile (list "key1""key2"...)(list value1 value2 ...)),假如要把value的值给key同名的变量,(mapcar'(lambda(x y)(set(read x)y)) (list "key1""key2"...)(list value1 value2 ...))

回复 支持 反对

使用道具 举报

发表于 2025-7-20 14:54:29 | 显示全部楼层
tryhi
回复 支持 反对

使用道具 举报

 楼主| 发表于 2025-7-20 18:05:28 来自手机 | 显示全部楼层
dcl有几十个控件,lable肯定要使用中文,key会加英文前缀,然后在过程中同样使用中文变量,主要是方便理解调试,飞诗编辑器也很给力。原代码有太多setq了,还涉及到默认赋值以及推荐运算,自定义计算等,重复操作太多,本来是想精简一下,用foreach批量处理,才萌生将lable中文名作为变量名read处理。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2025-7-20 18:11:38 来自手机 | 显示全部楼层
多谢各位解惑答疑,还是老老实实用英文变量吧,毕竟用lsp代码再好看,也不抵准确无误的结果
回复 支持 反对

使用道具 举报

发表于 2025-7-21 15:31:19 | 显示全部楼层
本帖最后由 tryhi 于 2025-7-21 15:46 编辑

(setq 底部后杆 "底部后杆")
(setq 走道斜杆 "走道斜杆")
(princ 底部后杆);按道理应该输出“底部后杆”,实际结果输出“走道斜杆”

你这题目写得太复杂了,这样写就清晰了,这个跟我上次得出来的结论不一样
上次得出来一个固定的结论“变量里面的第一个双字节文字,其第一个字节将会被CAD忽略”,但是这个很奇怪,8个字节的变量,只有最后两个字节相同,居然也会窜在一起,更奇怪的是同时删除任何一个字,或者同时加上一个字母,它又正常了,这个完全看不出来规律了


而且运行完上面3条命令后,再(read "底部后杆"),输出来的居然变成了走道斜杆,也就说说在中文下,不止变量会出现异常,read同样也会异常
回复 支持 反对

使用道具 举报

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

本版积分规则

小黑屋|手机版|CAD论坛|CAD教程|CAD下载|联系我们|关于明经|明经通道 ( 粤ICP备05003914号 )  
©2000-2023 明经通道 版权所有 本站代码,在未取得本站及作者授权的情况下,不得用于商业用途

GMT+8, 2025-8-12 04:20 , Processed in 0.177724 second(s), 25 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表