Тема: AHK: Значение переменной значения переменной
Как в msgbox получить единицу используя только переменную "c"?
Так не работает.
a = 1
b = a
c = b
msgbox % %%c%%Вы не вошли. Пожалуйста, войдите или зарегистрируйтесь.
Страницы 1
Чтобы отправить ответ, вы должны войти или зарегистрироваться
Как в msgbox получить единицу используя только переменную "c"?
Так не работает.
a = 1
b = a
c = b
msgbox % %%c%%Значение переменной значения переменной
Заголовок огонь.
А задача увидеть в переменной 1, которая равна обычной букве, заставляет задуматся. Может
%%%%c%%%%Хотя нет, почему то.
Ладно, бывает:
a := 1
b := a
c := b
msgbox % c
a := 1
b := "a"
c := "b"
Transform c, Deref, % "%" c "%" ; c := %c%
Transform c, Deref, % "%" c "%" ; c := %c%
MsgBox % c
a := 1
b := &a
c := &b
MsgBox % StrGet(StrGet(c))bWRmeA, а если отсылок неизвестное количество?
Это интересно. Но в каких случаях это вообще может быть применено?
Это интересно. Но в каких случаях это вообще может быть применено?
Затрудняюсь, по-моему чисто теоретический интерес. Обычно отсылка бывает всего одна, типа:
var1 := 1, var2 := 2, var3 := 3
str := "var1|var2|var3"
Loop, parse, str, |
MsgBox, % %A_LoopField%bWRmeA, а если отсылок неизвестное количество?
Почему если? Оно и так неизвестно. Два derefa и две вложенности это случайное совпадение ![]()
М-м-м... Я чего-то не понимаю?
a := 1
x := "a"
b := "x"
c := "b"
Transform c, Deref, % "%" c "%" ; c := %c%
Transform c, Deref, % "%" c "%" ; c := %c%
MsgBox % cВ c, b лежат символы никак не указывающие на то, что они являются ссылкой на переменную, глубина вложенности задаётся логикой кода (бредового) примера, если бы в "c" была строка "%%b%%" тогда можно было бы сказать, что два deref не охватывают возможную неограниченную глубину вложенности в "с".
если отсылок неизвестное количество?
Вопрос некорректный, количество отсылок неизвестно изначально.
Вопрос некорректный, количество отсылок неизвестно изначально.
Не совсем понял. Как же неизвестно, если вы подразумеваете ровно две вложенности?
Можно переформулировать вопрос. Как точно узнать, что переменная является отсылкой на другую?
Мой ход мысли такой:
c := 1
MsgBox, % &%c%Но почему-то выдаёт результат, и все время один, независимо от значения.
если вы подразумеваете ровно две вложенности
Это код в первом посте подразумевает.
Как точно узнать, что переменная является отсылкой на другую
Средствами синтаксиса ahk? Никак.
Но почему-то выдаёт результат, и все время один, независимо от значения.
Это признак что переменная не инициализирована, один результат для всех неинициализированных переменных.
То, что в переменной хранится строка, которую можно интерпретировать как имя существующей переменной, не является достаточным аргументом для утверждения, что переменная является отсылкой на другую.
Если договориться о синтаксисе создания псевдонимов для переменных:
a := 1
b := "%a%"
c := "%b%"
MsgBox % Deref(c)
Deref(var) { ; без проверок правильности синтаксиса
while InStr(var, "%")
Transform var, Deref, % var
return var
}Другое вопрос, для чего это может быть нужно.
Как в msgbox получить единицу используя только переменную "c"?
Так не работает.a = 1 b = a c = b msgbox % %%c%%
a = 1
b = %a%
c = %b%
msgbox % cЕсли договориться о синтаксисе создания псевдонимов для переменных:
a := 1 b := "%a%" c := "%b%" MsgBox % Deref(с) Deref(var) { ; без проверок правильности синтаксиса while InStr(var, "%") Transform var, Deref, % var return var }Другое вопрос, для чего это может быть нужно.
Вообще-то не работает
.
Оно и понятно: если открыть в отладке variables and their contents, нам предстанут две переменные с именем "c"
Вывод: Punto Switcher - зло ![]()
Мои пять копеек по этому вопросу: Соглашение по созданию псевдонимов все же необходимо, ибо как заметил bWRmeA, наличие непустой строки в переменной не есть аргумент, чтобы интерпретировать содержимое переменной как ссылку на другую переменную, даже если это и будет формально допустимым. Например, если а := 1, то "1" по сути тоже переменная, содержащая значение первого переданного скрипту параметра.
Global _:= "ref_"
a := 321
b = %_%a
c = %_%b
d = %_%c
MsgBox % Deref(d)
Deref(var) {
Return (InStr(var, _) && var := SubStr(var, ++StrLen(_))) ? Deref(%var%) : var
}Вообще-то не работает
Исправил опечатку.
Страницы 1
Чтобы отправить ответ, вы должны войти или зарегистрироваться