1 (изменено: Indomito, 2013-11-04 17:12:28)

Тема: AHK: Определение через Static не понимает ":=", а только "="

И так сабж.
Вот фрагмент функции

fnThreeKeys(сBaseKey, cAloneKey, cDoubleKey, cHoldingKey, сPause_PressKey:= 0.3, cCountHoldingBaseKey:= 0.025, fAutoRepeat:=false, fStack:=false)
{
  static  arStackKey   =  [[false,false]         ; Двухмерный массив стека
                                    ,[false,false]],
          iTopStack      = 0,                           ; Верхний индекс стека
          iLastStack       = 0,                           ; Нижний индекс стека, для реализации дека
          fStackKeys      = false                       ; Флаг стека клавиш
 
  static  vSecond       =  0,                            ; Время для определения повторов
          vBaseKey       =  0,                            ; Клавиша вторичного входа
          fDoubleKey    =  false,                       ; Флаг двойного нажатия 
          fHoldingKey   =  false                        ; Флаг удержания
        
return
}

Скрипт долго ругался на ошибку в коде, но дальше т.е. на выполняемую часть, а не описательную и я методом комментирования понял, что дело в описательной части.

Сразу возникли несколько вопросов

  1. Если не указывать значения, то они буду гарантированно FALSE

  2. Если я оставлю "=" то это не приведёт к ошибки при выполнении при использовании ":="

Просто не хочется отлавливать ошибки исполнения, это бывает проблематично.

Суть вопроса в том, как мне лучше описать статические переменные функции, т.е. как наиболее будет правильно.

"На каждое действие есть равная ему противодействующая критика." Постулат Харриссона
Для NotePad++(подсветка синтаксиса, автозавершение и плагины(AutoSave и RunMe).
OS Windows 10 x64 Pro

2

Re: AHK: Определение через Static не понимает ":=", а только "="

После серии экспериментов/издевательств получил запись вида:

fnThreeKeys(сBaseKey, cAloneKey,cDoubleKey,cHoldingKey,сPausePressKey:= 0.3,cWaitHoldingeKey:= 0.025,fAutoRepeat:=false,fStack:=false)
{
  static  arStackKey    := [[false,false],[false,false]]  ; Двухмерный массив стека
  static  iTopStack     := 0                              ; Верхний индекс стека
  static  iLastStack    := 0                              ; Нижний индекс стека, для реализации дека 
  static  fStackKeys    := false                          ; Флаг стека клавиш
 
  static  vSecond       := 0                              ; Время для определения повторов
  static  vBaseKey      := 0                              ; Клавиша вторичного входа
  static  fDoubleKey    := false                          ; Флаг двойного нажатия 
  static  fHoldingKey   := false                          ; Флаг удержания
        
return
}

Так верно? Нет подводных камней?

Мне раньше казалось, видимо не сталкивался, что допустима многострочная запись, т.е. запись через запятую.

"На каждое действие есть равная ему противодействующая критика." Постулат Харриссона
Для NotePad++(подсветка синтаксиса, автозавершение и плагины(AutoSave и RunMe).
OS Windows 10 x64 Pro

3 (изменено: YMP, 2013-11-04 17:00:27)

Re: AHK: Определение через Static не понимает ":=", а только "="

Для аргументов функции допустима. Про переменные не слышал.

Кстати, многострочная запись и запись через запятую — не одно и то же. Так что не совсем понятно, почему вы их соединили через "т.е.".

4 (изменено: Indomito, 2013-11-04 17:03:59)

Re: AHK: Определение через Static не понимает ":=", а только "="

Поясни, не понял, ты про что?
Я про аргументы функции и про переменные.

UPD

YMP пишет:

Кстати, многострочная запись и запись через запятую — не одно и то же.

нужно через точку или как?

"На каждое действие есть равная ему противодействующая критика." Постулат Харриссона
Для NotePad++(подсветка синтаксиса, автозавершение и плагины(AutoSave и RunMe).
OS Windows 10 x64 Pro

5

Re: AHK: Определение через Static не понимает ":=", а только "="

Неужели не видел этого в чужих кодах?


fnThreeKeys(сBaseKey, cAloneKey,cDoubleKey,cHoldingKey,сPausePressKey:= 0.3,cWaitHoldingeKey:= 0.025,fAutoRepeat:=false,fStack:=false)
{
  static  arStackKey    := [[false,false],[false,false]]  ; Двухмерный массив стека
        , iTopStack     := 0                              ; Верхний индекс стека
        , iLastStack    := 0                              ; Нижний индекс стека, для реализации дека 
        , fStackKeys    := false                          ; Флаг стека клавиш
        , 
        , vSecond       := 0                              ; Время для определения повторов
        , vBaseKey      := 0                              ; Клавиша вторичного входа
        , fDoubleKey    := false                          ; Флаг двойного нажатия 
        , fHoldingKey   := false                          ; Флаг удержания
        
return
}

B так сабж.

Обределение

Новые слова и обороты?

По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru Telegram: https://t.me/sergiol982
Win10x64 AhkSpy, Hotkey, ClockGui

6 (изменено: Indomito, 2013-11-04 17:15:52)

Re: AHK: Определение через Static не понимает ":=", а только "="

Понял, в чём ошибся, помню, что писал многострочную запись, а вот как... положение запятой перепутал.

Про "B так сабж." и "Обределение" только что увидел...  да уж, я написал

UPD

Поправил.
Кстати "B так сабж." написано верно, только "B"  это и в англ. раскладке клавиатуры

"На каждое действие есть равная ему противодействующая критика." Постулат Харриссона
Для NotePad++(подсветка синтаксиса, автозавершение и плагины(AutoSave и RunMe).
OS Windows 10 x64 Pro

7

Re: AHK: Определение через Static не понимает ":=", а только "="

Indomito пишет:

нужно через точку или как?

Нет, я к тому, что эти два выражения не обозначают одно и то же. То же самое, если бы вы сказали "человек, т.е. мужчина".

Но проблема решена, как я понимаю.

8 (изменено: Indomito, 2013-11-04 17:28:46)

Re: AHK: Определение через Static не понимает ":=", а только "="

serzh82saratov пишет:

Неужели не видел этого в чужих кодах?

Кстати ты немного опечатался, одна запятая повисла без определения.

fnThreeKeys(сBaseKey, cAloneKey,cDoubleKey,cHoldingKey,сPausePressKey:= 0.3,cWaitHoldingeKey:= 0.025,fAutoRepeat:=false,fStack:=false)
{
  static  arStackKey    := [[false,false],[false,false]]  ; Двухмерный массив стека
        , iTopStack     := 0                              ; Верхний индекс стека
        , iLastStack    := 0                              ; Нижний индекс стека, для реализации дека 
        , fStackKeys    := false                          ; Флаг стека клавиш
        , <------- это не нужно. 
        , vSecond       := 0                              ; Время для определения повторов
        , vBaseKey      := 0                              ; Клавиша вторичного входа
        , fDoubleKey    := false                          ; Флаг двойного нажатия 
        , fHoldingKey   := false                          ; Флаг удержания
        
return
}

UPD

YMP пишет:

Но проблема решена, как я понимаю.

Да, всё работает. Просто синтаксис похож на "сишный", но иногда некоторые мелочи записываются не так, и это вносит путаницу

"На каждое действие есть равная ему противодействующая критика." Постулат Харриссона
Для NotePad++(подсветка синтаксиса, автозавершение и плагины(AutoSave и RunMe).
OS Windows 10 x64 Pro

9

Re: AHK: Определение через Static не понимает ":=", а только "="

Просто синтаксис похож на "сишный", но иногда некоторые мелочи записываются не так, и это вносит путаницу

Причём тут другой язык, у AutoHotkey есть своя справка - Разбивка длинных строк на ряд более коротких - Способ №1.

По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru Telegram: https://t.me/sergiol982
Win10x64 AhkSpy, Hotkey, ClockGui

10

Re: AHK: Определение через Static не понимает ":=", а только "="

В Си так же ставятся запятая, правда на неё нет ограничений, т.е. в середине строки, в конце или в начале.

"На каждое действие есть равная ему противодействующая критика." Постулат Харриссона
Для NotePad++(подсветка синтаксиса, автозавершение и плагины(AutoSave и RunMe).
OS Windows 10 x64 Pro

11

Re: AHK: Определение через Static не понимает ":=", а только "="

serzh82saratov, Korobkoff, Irbis, Malcev призывы к грамотности - это, конечно, очень хорошо. Но столь детально рассуждать о ней следует в отдельной специальной теме, не переходя при том на личности.