broncos15 发表于 2022-7-5 17:29:13

使用if初始化getkword(&G)

我试图用if和语句让用户选择一个对象,然后我问用户一个问题。我试图用默认选项提示,并且只允许最大值/最小值。然而,当我将initget语句放在(if)之前时,它似乎工作不正常
(initget "Maximum mInimum")
(if
   (and
   (setq ent (selectif "\nSelect structure type to test: " prd))
   (setq *dropans*
            (cond
            (
               (getkword
               (strcat "\nDo you want to test for drop <"
                         (setq *dropans*
                              (cond (*dropans*)
                                    ("Maximum")
                              )
                         )
                         ">: "
               )
               )
            )
            (*dropans*)
            )
   )

Lee Mac 发表于 2022-7-5 17:52:35

我建议如下:
(if (setq ent (selectif "\nSelect structure type to test: " prd))
   (progn
       (or *dropans* (setq *dropans* "Maximum"))
       (initget "Maximum mInimum")
       (if (setq tmp (getkword (strcat "\nDo you want to test for drop <" *dropans* ">: ")))
         (setq *dropans* tmp)
       )
   )
)
不需要在if语句的测试表达式中包含第二个提示,因为第二个提示不能返回null。

broncos15 发表于 2022-7-5 17:58:35

谢谢李!我将它包含在and语句中的唯一原因是,我将有第三个提示,可以返回null。如果我理解正确,我需要两个If语句,一个在另一个里面?

Lee Mac 发表于 2022-7-5 18:08:10

 
这是实现它的一种方法;否则,在测试第三个提示符返回的值之前,可以在测试表达式中使用progn语句来计算许多表达式。

broncos15 发表于 2022-7-5 18:24:16

啊,这是个好主意!我忘了可以在and语句中使用progn函数。

Lee Mac 发表于 2022-7-5 18:35:00

不客气您可以在任何地方使用progn函数,因为这只是一个S表达式,就像任何其他AutoLISP函数的求值一样。
页: [1]
查看完整版本: 使用if初始化getkword(&G)