1

Тема: AHK: вложенность тернальных операторов

Доброй ночи господа.
Не спиться после праздников и пытаюсь понять "отчего скрипт не работает"?
После третьего сравнения в тернальном операторе переменная ff пустая. Отчего так?

#NoEnv 
#Singleinstance force

    A1:=2
    A2:=11 
    A3:=16 
    
    loop, 3
    {
        nn:=A%A_Index%
        ff:= nn=2 ? 1 : nn=11 ? 15 : nn=16 ? 12
        msgbox, nn=%nn%  ff=%ff%
    }
    
return

Игрался со скобками и так и эдак. Не поддается.

Жизнь стоит того чтобы не быть сволочью. (с) Разные Люди

2

Re: AHK: вложенность тернальных операторов

В последнем случае тоже должен быть оператор выбора ":"


#NoEnv 
#Singleinstance force

    A1:=2
    A2:=11 
    A3:=16 
    
    loop, 3
    {
        nn:=A%A_Index%
        ff:= nn=2 ? 1 : nn=11 ? 15 : nn=16 ? 12 :
        msgbox, nn=%nn%  ff=%ff%
    }
    
return

3

Re: AHK: вложенность тернальных операторов

Б-же мой, как все просто. А я два дня "бился"..... Спасибо YMP

off: еще "+" пунктик в NFAQ

Жизнь стоит того чтобы не быть сволочью. (с) Разные Люди

4 (изменено: serzh82saratov, 2013-05-04 00:17:13)

Re: AHK: вложенность тернальных операторов

Выражение "nn=16 ? 12" не является тернарным, так как нет завершающего или. После окончательного "или", желательно добавлять кавычки

ff:= nn=2 ? 1 : nn=11 ? 15 : nn=16 ? 12 : ""

В данном случае можно обойтись

ff:= nn=2 ? 1 : nn=11 ? 15 : 12 

Так как результат заранее известен, если не 2 или 11.
Также для назначения нескольких переменных можно использовать такую тернарную конструкцию:


    loop, 3
    { 
        (A_Index = 1) ? (ff := 1 , nn := 2) : (A_Index = 2) ? (ff := 15 , nn := 11) : (ff := 12 , nn := 16) 
        msgbox %  " ff = " ff " `n nn = " nn 
    }
+ более наглядный пример
  loop, 3
    { 
        (A_Index = 1) ? (ff := 1 , nn := 2) 
        : (A_Index = 2) ? (ff := 15 , nn := 11) 
        : (A_Index = 3) ? (ff := 12 , nn := 16) 
        msgbox %  " ff = " ff " `n nn = " nn 
    }

Или использовать массивы:


    loop, 3 
        msgbox %  " ff = " ff := {2:1,11:15,16:12}[ nn := [2,11,16][A_Index]] 
        . "`n nn = " nn 

Но это наверное можно ещё упростить, я с массивами плохо знаком.

Если всё зависит от итерации цикла то проще:

    loop, 3 
        msgbox %  " ff = " ff := [1,15,12][A_Index]   
        . "`n nn = " nn := [2,11,16][A_Index]   
По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru Telegram: https://t.me/sergiol982
Win10x64 AhkSpy, Hotkey, ClockGui