【问题标题】:Meaning of ":" and "?"“:”和“?”的含义
【发布时间】:2018-07-23 09:21:24
【问题描述】:

我在 AutoIt 脚本的 Return 语句中发现了分号和问号:

#AutoIt3Wrapper_Au3Check_Parameters=-d -w 1 -w 2 -w 3 -w 4 -w 5 -w 6

Func A()
  ;do somethingA
EndFunc

Func B($a,$b,$c)
  ;do somethingB
EndFunc

Func C($a,$b,$c,$d)
  ;do somethingC
EndFunc

Func CallFunc( $f, $a = Default, $b = Default, $c = Default, $c = Default )
  Return FuncName($f) = "A" ? $f() : FuncName($f) = "B" ? $f($a,$b,$c) : $f($a,$b,$c,$d)
EndFunc

Example()

Func Example()
  CallFunc( A )
  CallFunc( B, 1, 2, 3 )
  CallFunc( C, 1, 2, 3, 4 )
EndFunc

我知道FuncName() 返回存储在变量中的函数的名称,但我不知道Return 语句中的问号和分号是什么意思:

Return FuncName($f) = "A" ? $f() : FuncName($f) = "B" ? $f($a,$b,$c) : $f($a,$b,$c,$d)

【问题讨论】:

    标签: function syntax return ternary-operator autoit


    【解决方案1】:

    我不知道问号和分号的含义

    根据Documentation - Keywords - Ternary operator

    根据表达式的结果有条件地选择两个响应之一。

    例如;

    Return $g_bBlockInput ? $MOE_BLOCKDEFPROC : $MOE_RUNDEFPROC
    

    在功能上等同于:

    If $g_bBlockInput Then
    
        Return $MOE_BLOCKDEFPROC
    
    Else
    
        Return $MOE_RUNDEFPROC
    
    EndIf
    

    所以

    Return FuncName($f) = "A" ? $f() : FuncName($f) = "B" ? $f($a,$b,$c) : $f($a,$b,$c,$d)
    

    等于:

    If FuncName($f) = "A" Then
    
        Return $f()
    
    Else
    
        If FuncName($f) = "B" Then
    
            Return $f($a,$b,$c)
    
        Else
    
            Return $f($a,$b,$c,$d)
    
        EndIf
    
    EndIf
    

    无论该代码的目的是什么,似乎都适合Switch...Case...EndSwitch。三元运算符的流行用法包括条件赋值。示例:

    Global Const $g_bState = True
    Global Const $g_sState = $g_bState ? 'ON' : 'OFF'
    
    ConsoleWrite('$g_bState = ' & $g_sState & @CRLF)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-09-02
      • 1970-01-01
      • 2019-09-13
      • 1970-01-01
      • 2011-08-12
      • 2017-05-05
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多