Тема: AHK: Что значит &
Хотелось бы узнать что значит &.
На форуме в RegEx не нашел.
Вы не вошли. Пожалуйста, войдите или зарегистрируйтесь.
Страницы 1
Чтобы отправить ответ, вы должны войти или зарегистрироваться
Хотелось бы узнать что значит &.
На форуме в RegEx не нашел.
Адресация (&) и разадресация (*). [v1.0.36.07+] Выражение &MyVar возвращает адрес содержимого переменной MyVar в памяти. Выражение *MyVar, напротив, предполагает, что идентификатор MyVar ссылается на числовой адрес в памяти и извлекает байт по этому адресу как число диапазона от 0 до 255 (если адрес нулевой, всегда возвращается 0, однако другие недействительные адреса могут привести к сбою в работе скрипта). Эти редко используемые операторы полезны при работе со структурами команды DllCall и при обработке строк, содержащих бинарные нули. Как пример можно посмотреть функцию ExtractInteger().
Alectric Спасибо
Побитовые И (&), исключающее ИЛИ (^), и ИЛИ (|). Операции имеют разный приоритет. Самый высокий приоритет среди них имеет &, а самый низкий - |. Перед вычислениями нецелые параметры округляются до целых.
Еще 1 вопрос. Что занчит : в данном случае?
(pr = "" || f - pr = 1) ? (pr := f, l++, s += f)
: ((l > r && (r := l, m := s)), l := s := 0, pr := "")
NOT - Логическое НЕ. За исключением более низкого приоритета, логическое НЕ совпадает с оператором !. Например, выражение Not (x = 3 or y = 3) равносильно выражению !(x = 3 or y = 3)
AND,&& - Оба данных оператора являются логическим И. Пример использования: x > 3 and x < 10. Для увеличения производительности по возможности используется схема быстрой оценки.
Строка, начинающаяся с AND/OR/&&/|| (или с другого оператора), становится продолжением предшествующей строки.
OR,|| - Оба оператора осуществляют логическое ИЛИ. Например: x <= 3 or x >= 10. По возможности, для ускорения используется быстрая оценка операции.
? : - Тернарный условный оператор [v1.0.46+]. Этот оператор является коротким вариантом конструкции if-else. Термин "тернарный" означает, что оператор связывает ТРИ операнда. Первый операнд рассматривается как булево условное выражение, определяющее какой из двух оставшихся операндов будет выбран для исполнения. Вот пример операции присвоения, в которой присваиваемое значение выбирается тернарным оператором:
var := x > y ? 2 : 3
Здесь, если x больше y, переменной Var присваивается значение 2, если нет - присваивается 3.Для ускорения при обработке оценивается только исполняемый операнд.
Примечание: из соображений совместимости знак "?" должен быть окружен пробелами (может быть это будет устранено в следующих версиях).
Alectric, Еще раз спасибо.
(pr = "" || f - pr = 1) ? (pr := f, l++, s += f)
: ((l > r && (r := l, m := s)), l := s := 0, pr := "")
Тоже что и:
if (pr="" or f-pr=1)
{
pr:=f
l++
s+=f
}
else
{
if (l>r)
{
r:=l
m:=s
}
l:=s:=0
pr:=""
}
Alectric, Спасибо большое
А вот здесь используется знак & для инициализации переменных:
; Информация об окне
WinGetPos &X, &Y, &W, &H,"A"
При этом не надо писать сначала X = 0, Y = 0 и т.д.
X = 0, Y = 0, W=1000, H=1000 ; Без этого будет ошибка
WinGetPos X, Y, W, H,"A"
Конечно, используя & внутри функции, задавать переменные короче. Но почему это работает?..
А вы какую версию AHK пытаетесь использовать? Похоже, в ваших примерах перепутан синтаксис v1 и v2.
teadrinker,
сейчас перешел на ver. 2. Первое выражение работает в ver. 2.
Ну да, работает, как в справке написано. А в чём вопрос-то?
teadrinker
В справке выше:
Выражение &MyVar возвращает адрес содержимого переменной MyVar в памяти
Вопрос, почему можно не определять начальные значения для переменной, как в примере выше. Хотя, в общем-то, работает и работает, какая особо разница.
А что за справка? Которая в первом посте процитирована? Так это для первой версии, у второй отдельная.
Страницы 1
Чтобы отправить ответ, вы должны войти или зарегистрироваться