来得太晚了,但只是很快。
这是编写此函数的另一种方法,我使用了4种不同的方法来测试SNF:
虽然是同一个主体,但只有一个条件为真,因此COND语句将处理它。
- (defun OLC_DCO () ;Define function
- (cond
- ((vl-string-position (ascii SFN) "123") ; one way to test
- (setq P (RTOS P 2 1)) ;Set P ~ (Power), Return to string, Decimal, 1 zero
- (set_tile "ANS" (strcat "Power = " P " watt(s)")) ;Set tile ANS, Concatenate string, evaluate P
- )
- ((member SFN '("4" "5" "6")) ; another way to test
- (setq I (RTOS I 2 1)) ;Set I ~ (Current), Return to string, Decimal, 1 zero
- (set_tile "ANS" (strcat "Current = " I " amp(s)"))
- )
- ((vl-string-search SFN "789") ; another way to test
- (setq E (RTOS E 2 1)) ;Set E ~ (Voltage), Return to string, Decimal, 1 zero
- (set_tile "ANS" (strcat "Voltage = " E " volt(s)")) ;Set tile ANS, Concatenate string, evaluate E
- )
- ((vl-position SFN '("10" "11" "12")) ; another way to test
- (setq R (RTOS R 2 1)) ;Set R ~ (Resistance), Return to string, Decimal, 1 zero
- (set_tile "ANS" (strcat "Resistance = " R " ohm(s)")) ;Set tile ANS, Concatenate string, evaluate R
- )
- )
- )
还有另一种方法。
- (defun OLC_DCO (/ lst data)
- (setq lst '(("Power = " P " watt(s)")
- ("Current = " I " amp(s)")
- ("Voltage = " E " volt(s)")
- ("Resistance = " R " ohm(s)")))
- (setq data (nth (fix(/ (1- (atoi SNF)) 3)) lst))
- (set (cadr data) (rtos (eval id) 2 1))
- (set_tile "ANS" (strcat (car data)(eval id)(caddr data)))
- )
请注意,将变量(如“R”)中的值从字符串切换为实数,再切换回字符串是不好的做法
在调试和更新例程时非常混乱。不过,在我的例子中,我并没有改变这一点。
此外,全局变量也不好。并非总是可以避免的,但您应该尝试将其本地化。
今晚就这些。PS未测试!
去打网球。。。。 |