<?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=10904</link>
		<atom:link href="https://forum.script-coding.com/extern.php?action=feed&amp;tid=10904&amp;type=rss" rel="self" type="application/rss+xml" />
		<description><![CDATA[Недавние сообщения в теме «AHK: Передача функции, в качестве аргумента, другой функции.».]]></description>
		<lastBuildDate>Sat, 29 Aug 2015 12:42:29 +0000</lastBuildDate>
		<generator>PunBB</generator>
		<item>
			<title><![CDATA[Re: AHK: Передача функции, в качестве аргумента, другой функции.]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=96904#p96904</link>
			<description><![CDATA[<p>Я например не понял зачем в принципе функция main, и параметр select.<br />Вызов можно осуществить просто по индексу из массива функций:<br /></p><div class="codebox"><pre><code>
fn := [Func(&quot;MyFunc1&quot;).Bind(&quot;test1&quot;, &quot;test2&quot;), Func(&quot;MyFunc2&quot;).Bind(&quot;test3&quot;), Func(&quot;MyFunc3&quot;)]

Loop % fn.MaxIndex()
    fn[A_Index].Call() 
  
MyFunc1(param1, param2)
{
   MsgBox,, % A_ThisFunc, % param1 &quot;`n&quot; param2
}

MyFunc2(param1)
{
   MsgBox,, % A_ThisFunc, % param1 
}

MyFunc3()
{
   MsgBox % A_ThisFunc
}
</code></pre></div><div class="fancy_spoiler_switcher"><div class="fancy_spoiler_switcher_header"><strong>+</strong>&nbsp;Можно добавить ещё свои параметры, даже если какая то из функций их не должна принимать:</div><div class="fancy_spoiler"><div class="codebox"><pre><code>
fn := [Func(&quot;MyFunc1&quot;).Bind(&quot;test1&quot;, &quot;test2&quot;), Func(&quot;MyFunc2&quot;).Bind(&quot;test3&quot;), Func(&quot;MyFunc3&quot;)]

Loop % fn.MaxIndex()
    fn[A_Index].Call(&quot;test4&quot;, &quot;test5&quot;)
  
MyFunc1(param1, param2, param3, param4)
{
   MsgBox,, % A_ThisFunc, % param1 &quot;`n&quot; param2 &quot;`n&quot; param3 &quot;`n&quot; param4
}

MyFunc2(param1)
{
   MsgBox,, % A_ThisFunc, % param1 
}

MyFunc3()
{
   MsgBox % A_ThisFunc
}
</code></pre></div></div></div>]]></description>
			<author><![CDATA[null@example.com (serzh82saratov)]]></author>
			<pubDate>Sat, 29 Aug 2015 12:42:29 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=96904#p96904</guid>
		</item>
		<item>
			<title><![CDATA[Re: AHK: Передача функции, в качестве аргумента, другой функции.]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=96894#p96894</link>
			<description><![CDATA[<div class="quotebox"><cite>Stremin пишет:</cite><blockquote><div class="codebox"><pre><code>main(&quot;func1&quot;, [&quot;param1&quot;, &quot;param2&quot;], &quot;func2&quot;, [&quot;param3&quot;, &quot;param4&quot;], 2)

main(f1, p1, f2, p2, select)
    {
    if(select = 1)
        %f1%(p1*)
    else
        %f2%(p2*)
    }</code></pre></div></blockquote></div><p>Ненужное усложнение: достаточно же main(f1, p1), ведь судя по коду по цепи будет вызываться только одна функция - либо первая, либо вторая.<br />А ещё полезно добавлять safe check проверки IsFunc(f1)/IsLabel(f1) и IsObj(p1).</p>]]></description>
			<author><![CDATA[null@example.com (Drugoy)]]></author>
			<pubDate>Sat, 29 Aug 2015 12:00:54 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=96894#p96894</guid>
		</item>
		<item>
			<title><![CDATA[Re: AHK: Передача функции, в качестве аргумента, другой функции.]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=96840#p96840</link>
			<description><![CDATA[<p><strong>yalanne, teadrinker</strong><br />Спасибо вам за помощь. Уже после создания темы, справился сам, сделал так:<br /></p><div class="codebox"><pre><code>
main(&quot;func1&quot;, [&quot;param1&quot;, &quot;param2&quot;], &quot;func2&quot;, [&quot;param3&quot;, &quot;param4&quot;], 2)

main(f1, p1, f2, p2, select)
    {
    if(select = 1)
        %f1%(p1*)
    else
        %f2%(p2*)
    }

func1(a, b)
    {
    ToolTip % format(&quot;Функция : {}, её параметры : {}, {}&quot;, A_ThisFunc, b, a)
    }

func2(a, b)
    {
    ToolTip % format(&quot;Функция : {}, её параметры : {}, {}&quot;, A_ThisFunc, b, a)
    }
</code></pre></div><p><strong>yalanne</strong> Цель была следующая: есть некий код (функция main для примера), фрагмент которого, может быть произвольным (функцией или меткой).</p><p><strong>teadrinker</strong> Ваш вариант в чём-то даже удобнее, т.к. у функции меньше аргументов (3 против 5).</p>]]></description>
			<author><![CDATA[null@example.com (Stremin)]]></author>
			<pubDate>Fri, 28 Aug 2015 14:57:45 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=96840#p96840</guid>
		</item>
		<item>
			<title><![CDATA[Re: AHK: Передача функции, в качестве аргумента, другой функции.]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=96815#p96815</link>
			<description><![CDATA[<div class="codebox"><pre><code>main(Func(&quot;MyFunc1&quot;).Bind(&quot;test1&quot;, &quot;test2&quot;), Func(&quot;MyFunc2&quot;).Bind(&quot;test3&quot;, &quot;test4&quot;), 1)

main(f1, f2, select)
{
   if (select = 1)
      f1.Call()
   else
      f2.Call()
}

MyFunc1(param1, param2)
{
   MsgBox,, % A_ThisFunc, % param1 &quot;`n&quot; param2
}

MyFunc2(param1, param2)
{
   MsgBox,, % A_ThisFunc, % param1 &quot;`n&quot; param2
}</code></pre></div>]]></description>
			<author><![CDATA[null@example.com (teadrinker)]]></author>
			<pubDate>Tue, 25 Aug 2015 21:22:38 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=96815#p96815</guid>
		</item>
		<item>
			<title><![CDATA[Re: AHK: Передача функции, в качестве аргумента, другой функции.]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=96807#p96807</link>
			<description><![CDATA[<p>Вот вариант, но параметры будут что у первой, что у второй одинаковы.<br /></p><div class="codebox"><pre><code>main(&quot;func1&quot;, &quot;func2&quot;, 1,    &quot;test1&quot;,&quot;test2&quot;,&quot;test3&quot;)

main(f1, f2, select, parameters*)
    {
    if(select = 1)
        %f1%(parameters*)
    else
        %f2%(parameters*)
    }

func1(parameters*)
    {
    msgbox % &quot;Функция &quot; A_ThisFunc &quot;`nПереданно параметров &quot; parameters.MaxIndex()
    msgbox % parameters.1 &quot;`n&quot; parameters.3
    }

func2(parameters*)
    {
    msgbox % &quot;Функция &quot; A_ThisFunc &quot;`nПереданно параметров &quot; parameters.MaxIndex()
    msgbox % parameters.2
    }
    
Esc::ExitApp</code></pre></div><p>А какова цель что бы у первой и второй функции была общая переменная, но что бы эта переменная не была глобальная?<br />Если да то можно вот так через класс сделать<br /></p><div class="codebox"><pre><code>Class Main
{
    F1(p1,p2)
    {
        msgbox % &quot;Имя функции: &quot; A_ThisFunc &quot;`n`nпереданные параметры этой функции: `n`t&#039;&quot; p1 &quot;&#039;`n`t&#039;&quot; p2 &quot;&#039;`n`nОбщая переменная: `n`t&#039;&quot; this.VarStatic &quot;&#039;&quot;
    }
    
    F2(p1,p2)
    {
        msgbox % &quot;Имя функции: &quot; A_ThisFunc &quot;`n`nпереданные параметры этой функции: `n`t&#039;&quot; p1 &quot;&#039;`n`t&#039;&quot; p2 &quot;&#039;`n`nОбщая переменная: `n`t&#039;&quot; this.VarStatic &quot;&#039;&quot;
    }
}

Main := new Main
Main.VarStatic := &quot;Эта переменная общая для main класса и его функций&quot;

Main.F1(&quot;Первый параметр для первой функции&quot;,&quot;Второй параметр для первой функции&quot;)
Main.F2(&quot;Первый параметр для второй функции&quot;,&quot;Второй параметр для второй функции&quot;)</code></pre></div>]]></description>
			<author><![CDATA[null@example.com (yalanne)]]></author>
			<pubDate>Tue, 25 Aug 2015 17:32:25 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=96807#p96807</guid>
		</item>
		<item>
			<title><![CDATA[AHK: Передача функции, в качестве аргумента, другой функции.]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=96806#p96806</link>
			<description><![CDATA[<p>Каким образом, можно организовать передачу функции в функцию? Отчасти, для функций без параметров, понятно как это сделать.<br />Например:<br /></p><div class="codebox"><pre><code>
main(&quot;func1&quot;, &quot;func2&quot;, 1)

main(f1, f2, select)
    {
    if(select = 1)
        %f1%()
    else
        %f2%()
    }

func1()
    {
    ToolTip % &quot;функция 1&quot;
    }

func2()
    {
    ToolTip % &quot;функция 2&quot;
    }

Esc::ExitApp
</code></pre></div><p>Как осуществить то же самое, но для функции с параметрами? Т.е. что-то вроде:</p><div class="quotebox"><blockquote><p><em>вызов</em>:<br />main(функция #1(параметры), функция #2(параметры), выбор)</p><p><em>определение </em>:<br />main(функция #1, функция #2, выбор)<br />&nbsp; &nbsp; если выбор = 1<br />&nbsp; &nbsp; &nbsp; &nbsp; выполнить функция #1(параметры функции 1)<br />&nbsp; &nbsp; иначе<br />&nbsp; &nbsp; &nbsp; &nbsp; выполнить функция #2(параметры функции 2)</p></blockquote></div><p>Если не трудно, с примером.</p>]]></description>
			<author><![CDATA[null@example.com (Stremin)]]></author>
			<pubDate>Tue, 25 Aug 2015 17:04:06 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=96806#p96806</guid>
		</item>
	</channel>
</rss>
