Jef! 发表于 2022-7-5 15:44:38

vl打印到字符串错误或m

我只是浪费了相当多的时间来弄清楚为什么我的代码没有按预期工作(使用CAD 2015)。只是不知道该怎么办。我们来玩吧。
(setq aa "bar")
(setq x "aa")

 
基于(princ aa)返回条“bar”(返回条+回音“bar”,对吗?)
这样(eval(read x))返回>“bar”(不返回任何内容,只返回echo?),和(type(eval(read x)))返回>STR
 
(progn
(princ "type: ")
(princ (type (eval (read x))))
(princ " & value: ")
(princ (eval (read x)))
(princ)
)
返回>类型:STR和值:bar
 
这正是我所期望的使用vl princ作为“故障安全princ”字符串,但是
(progn
(princ "type: ")
(vl-princ-to-string (type (eval (read x))))
(princ " & value: ")
(vl-princ-to-string (eval (read x)))
(princ)
)

返回>类型:&值:
 
(vl princ to string(eval(read x)))返回>“bar”(只是回声?)
(princ(eval(read x)))返回>条“bar”(返回+回声)
进一步测试
(vl princ to string(eval(read x)))(princ)(当princ抑制回声时不返回任何内容)
(princ(eval(read x))(princ)返回>条(返回无回声)
 
我开始认为eval只是echo,什么也不返回,但是(type(eval(read x)))告诉我这是一个STR,为什么vl princ到string不能“处理”它?我错过了什么?很有趣。

Lee Mac 发表于 2022-7-5 16:12:06

我不太清楚您在问什么,但请注意,vl princ/prin1 to string函数只返回所提供参数的字符串表示形式(就像它已提供给princ/prin1一样),但不会将其打印到命令行。

Jef! 发表于 2022-7-5 16:37:13

如果vl princ/prin1 to string函数只返回所提供参数的字符串表示形式(就像它已提供给princ/prin1一样),那么我的问题是,为什么在本例中,2 vl princ to string什么也不返回,而通过princ交换它们可以工作,并显示所提供的(eval(read x))是一个字符串及其值
 
(progn
(setq aa "bar")
(setq x "aa")
(princ "type: ")
(vl-princ-to-string (type (eval (read x))))< doesn't return anything
(princ " & value: ")
(vl-princ-to-string (eval (read x)))            < doesn't return anything
(princ)
)
 
对于princ,示例返回以下内容
>类型:STR值:bar(&V)
使用vl princ来字符串,示例返回
>类型:值(&V):
 
帮助只说“返回LISP数据的字符串表示形式,就像它是由princ函数输出的一样”,我不理解为“但不要将其打印到命令行”。考虑到这一点,现在这是可以理解的。谢谢你不打断我的大脑李!
 
对于其他通过关键字找到这一点的人:基本上,如果您想动态监视变量或任何数据,而不必担心不同的数据类型,请使用
(princ(vl princ到字符串*变量或表达式到监视器*)
 
干杯
杰夫!

Roy_043 发表于 2022-7-5 16:48:35

我使用(打印…)为此目的。
页: [1]
查看完整版本: vl打印到字符串错误或m