<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
	<channel>
		<title><![CDATA[Серый форум &mdash; AHK: циклы непонятно себя ведут в теле функции]]></title>
		<link>https://forum.script-coding.com/viewtopic.php?id=13889</link>
		<atom:link href="https://forum.script-coding.com/extern.php?action=feed&amp;tid=13889&amp;type=rss" rel="self" type="application/rss+xml" />
		<description><![CDATA[Недавние сообщения в теме «AHK: циклы непонятно себя ведут в теле функции».]]></description>
		<lastBuildDate>Thu, 28 Jun 2018 14:17:41 +0000</lastBuildDate>
		<generator>PunBB</generator>
		<item>
			<title><![CDATA[Re: AHK: циклы непонятно себя ведут в теле функции]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=126530#p126530</link>
			<description><![CDATA[<p><strong>YMP</strong>, спасибо. Полная ясность достигнута.</p>]]></description>
			<author><![CDATA[null@example.com (jahrecvarec)]]></author>
			<pubDate>Thu, 28 Jun 2018 14:17:41 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=126530#p126530</guid>
		</item>
		<item>
			<title><![CDATA[Re: AHK: циклы непонятно себя ведут в теле функции]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=126526#p126526</link>
			<description><![CDATA[<p>Они как бы видны, но локальные имеют приоритет. Инструкция &quot;global title&quot; внутри функции означает, что это имя нужно понимать, как имя глобальной переменной, а не создавать под него локальную. А иначе интерпретатор видит имя &quot;title&quot; и по умолчанию считает, что вам нужна локальная переменная. Он её и создаёт.</p><p>Как только вы дали понять, что title — это имя глобальной переменной, вы можете её читать и менять изнутри функции. Т.е. сама переменная доступна, всё дело в интерпретации её имени.</p>]]></description>
			<author><![CDATA[null@example.com (YMP)]]></author>
			<pubDate>Thu, 28 Jun 2018 11:22:40 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=126526#p126526</guid>
		</item>
		<item>
			<title><![CDATA[Re: AHK: циклы непонятно себя ведут в теле функции]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=126523#p126523</link>
			<description><![CDATA[<p><strong>YMP</strong>, то есть </p><div class="quotebox"><blockquote><p>За исключением локальных переменных в функциях, <strong>все переменные имеют глобальную видимость</strong>; это значит, что их содержимое может быть прочитано или изменено <strong>из любой точки текущего скрипта</strong>.</p></blockquote></div><p>имеется ввиду, что они могут быть прочитаны или изменены из любой точки текущего скрипта <strong>вне тел функций</strong>? Это понятно, что локальные переменные в функциях больше нигде не видны, однако наблюдается и обратный эффект - эти самые переменные которые имеют глобальную видимость не видны внутри тела функции. <br />То ли я неправильно понял, то ли формулировочка туманная.</p>]]></description>
			<author><![CDATA[null@example.com (jahrecvarec)]]></author>
			<pubDate>Thu, 28 Jun 2018 08:15:09 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=126523#p126523</guid>
		</item>
		<item>
			<title><![CDATA[Re: AHK: циклы непонятно себя ведут в теле функции]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=126522#p126522</link>
			<description><![CDATA[<div class="quotebox"><cite>jahrecvarec пишет:</cite><blockquote><p>Вероятно это не относится к AHK v1.1</p></blockquote></div><p>Нет, и до него было так же. Только не было возможности объявить глобальность переменной вне функции (т.е. для всех функций). Была только возможность сделать это внутри функции для неё одной. </p><p>Тут, видимо, фокус в том, что переменные в АНК создаются в момент использования. Если это происходит внутри функции, то создаётся локальная переменная, которая и закрывает собой глобальную. Поэтому и нужно заранее указать её глобальной, если нужна именно глобальная.</p>]]></description>
			<author><![CDATA[null@example.com (YMP)]]></author>
			<pubDate>Thu, 28 Jun 2018 07:50:44 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=126522#p126522</guid>
		</item>
		<item>
			<title><![CDATA[Re: AHK: циклы непонятно себя ведут в теле функции]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=126521#p126521</link>
			<description><![CDATA[<p><strong>ypppu</strong><br />Поправил. Простите.</p>]]></description>
			<author><![CDATA[null@example.com (jahrecvarec)]]></author>
			<pubDate>Thu, 28 Jun 2018 07:08:05 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=126521#p126521</guid>
		</item>
		<item>
			<title><![CDATA[Re: AHK: циклы непонятно себя ведут в теле функции]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=126520#p126520</link>
			<description><![CDATA[<p><span style="color: green"><strong>jahrecvarec</strong>, прочитайте правила форума и исправьте заголовок темы.</span></p>]]></description>
			<author><![CDATA[null@example.com (ypppu)]]></author>
			<pubDate>Thu, 28 Jun 2018 03:32:01 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=126520#p126520</guid>
		</item>
		<item>
			<title><![CDATA[Re: AHK: циклы непонятно себя ведут в теле функции]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=126519#p126519</link>
			<description><![CDATA[<p>Спасибо за оперативность! <br />С областью видимости у AHK не очень понятно. <br />тут: <a href="http://www.script-coding.com/AutoHotkey/Variables.1.0.46.07.html#4">http://www.script-coding.com/AutoHotkey … .07.html#4</a> пишут: <br /></p><div class="quotebox"><blockquote><p><strong>Видимость переменных и их декларирование.</strong> За исключением локальных переменных в функциях, все переменные имеют глобальную видимость; это значит, что их содержимое может быть прочитано или изменено из любой точки текущего скрипта.</p></blockquote></div><p>Вероятно это не относится к AHK v1.1</p>]]></description>
			<author><![CDATA[null@example.com (jahrecvarec)]]></author>
			<pubDate>Wed, 27 Jun 2018 22:25:24 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=126519#p126519</guid>
		</item>
		<item>
			<title><![CDATA[Re: AHK: циклы непонятно себя ведут в теле функции]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=126518#p126518</link>
			<description><![CDATA[<p>Функция getwinstr() не видит переменную titles. Объявите ее глобально, либо поместите в саму функцию.</p><p><span style="color: gray">OFFTOP: Ой, как дядя модератор ругаться будет.</span></p>]]></description>
			<author><![CDATA[null@example.com (MandarinKa02)]]></author>
			<pubDate>Wed, 27 Jun 2018 21:53:21 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=126518#p126518</guid>
		</item>
		<item>
			<title><![CDATA[Re: AHK: циклы непонятно себя ведут в теле функции]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=126516#p126516</link>
			<description><![CDATA[<p>В функции переменная titles локальная, она не имеет отношения к внешней.</p>]]></description>
			<author><![CDATA[null@example.com (teadrinker)]]></author>
			<pubDate>Wed, 27 Jun 2018 21:48:41 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=126516#p126516</guid>
		</item>
		<item>
			<title><![CDATA[AHK: циклы непонятно себя ведут в теле функции]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=126513#p126513</link>
			<description><![CDATA[<p>Пытаюсь понять в чём проблема. В общем: ищем тайтлы всех окон, во вложенном цикле сверяем каждый с массивом заданных, складываем через &quot;|&quot; совпадения в одну строку. Если через Gosub всё отрабатывается вполне ожидаемо,<br /></p><div class="fancy_spoiler_switcher"><div class="fancy_spoiler_switcher_header" data-lang-open="открыть спойлер" data-lang-close="скрыть спойлер"><strong>+</strong>&nbsp;открыть спойлер</div><div class="fancy_spoiler"><div class="codebox"><pre><code>titles := [&quot;aaa&quot;, &quot;bbb&quot;, &quot;ccc&quot;, &quot;ddd&quot;, &quot;Sublime&quot;, &quot;Firefox&quot;, &quot;Chrome&quot;]
Gosub, getwinstr
titlematch=%winlst%
MsgBox, % titlematch ;ЗДЕСЬ МЫ ВИДИМ СОВПАВШИЙ ТАЙТЛ

getwinstr:
	winlst := &quot;&quot;
	WinGet, winid, List,,, 
	Loop, %winid%	
	{
		this_id := winid%A_Index%
		WinGetTitle, this_title, ahk_id %this_id%
		if (this_title = &quot;&quot;)
			continue	
		for i in titles	
		{	
			If InStr(this_title, titles[i]) 
			{
				sstr := titles[i]
				winlst = %winlst%`|%sstr%
				break
	}	}	}
	return
</code></pre></div></div></div><p> а если через функцию - внутренний цикл даже не стартует. <br /></p><div class="fancy_spoiler_switcher"><div class="fancy_spoiler_switcher_header" data-lang-open="открыть спойлер" data-lang-close="скрыть спойлер"><strong>+</strong>&nbsp;открыть спойлер</div><div class="fancy_spoiler"><div class="codebox"><pre><code>titles := [&quot;aaa&quot;, &quot;bbb&quot;, &quot;ccc&quot;, &quot;ddd&quot;, &quot;Sublime&quot;, &quot;Firefox&quot;, &quot;Chrome&quot;]

titlematch:=getwinstr()
MsgBox, % titlematch 

getwinstr()
{
	winlst := &quot;&quot;
	WinGet, winid, List,,, 
	Loop, %winid%
	{
		this_id := winid%A_Index%
		WinGetTitle, this_title, ahk_id %this_id%
		if (this_title = &quot;&quot;)
			continue	
		for i in titles
		{	
			MsgBox, % this_title ; ВОТ ЭТО МЫ НЕ ВИДИМ   Т_Т
			If InStr(this_title, titles[i])
			{
				sstr := titles[i]
				winlst = %winlst%`|%sstr%
				break
	}	}	}
	return winlst
}</code></pre></div></div></div><p>Куда копать? Мало инфы по вложенным циклам в AHK или просто я искал не там.</p><p><strong>UPD:</strong> Всем спасибо! Подсказки помогли разобраться с видимостью переменных. <img src="//forum.script-coding.com/img/smilies/smile.png" width="15" height="15" /> <br />Надо было массив объявлять так:<br /></p><div class="codebox"><pre><code>global titles := [&quot;aaa&quot;, &quot;bbb&quot;, &quot;ccc&quot;, &quot;ddd&quot;, &quot;Sublime&quot;, &quot;Firefox&quot;, &quot;Chrome&quot;]</code></pre></div><p>Или добавить в тело функции инструкцию:<br /></p><div class="codebox"><pre><code>global titles</code></pre></div><p>....Ну или, в случае ненадобности массива глобально - задавать его внутри функции.<br />Ещё раз всем спасибо! Тему можно закрывать.</p>]]></description>
			<author><![CDATA[null@example.com (jahrecvarec)]]></author>
			<pubDate>Wed, 27 Jun 2018 21:16:10 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=126513#p126513</guid>
		</item>
	</channel>
</rss>
