<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
	<channel>
		<title><![CDATA[Серый форум &mdash; AHK: Метод класса __Set()]]></title>
		<link>https://forum.script-coding.com/viewtopic.php?id=15643</link>
		<atom:link href="https://forum.script-coding.com/extern.php?action=feed&amp;tid=15643&amp;type=rss" rel="self" type="application/rss+xml" />
		<description><![CDATA[Недавние сообщения в теме «AHK: Метод класса __Set()».]]></description>
		<lastBuildDate>Wed, 02 Sep 2020 21:46:06 +0000</lastBuildDate>
		<generator>PunBB</generator>
		<item>
			<title><![CDATA[Re: AHK: Метод класса __Set()]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=141963#p141963</link>
			<description><![CDATA[<p>Правильно так:<br /></p><div class="codebox"><pre><code>class Test
{
   __New(data_01, data_02) {
      this.data_01 := data_01
      this.data_02 := data_02
      this.storage := {}
   }
   
   __Get(key) {
      return this.storage[key]
   }
   
   __Set(key, value) {
      if !(key ~= &quot;i)^(data_(01|02)|storage)$&quot;) {
         this.storage[key] := value
         Return value
      }
   }
}

obj := new Test(&quot;data_01&quot;, &quot;data_02&quot;)

MsgBox,% obj.data_01
MsgBox,% obj.data_02

obj.data_03 := &quot;test&quot;
MsgBox,% obj.data_03</code></pre></div>]]></description>
			<author><![CDATA[null@example.com (teadrinker)]]></author>
			<pubDate>Wed, 02 Sep 2020 21:46:06 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=141963#p141963</guid>
		</item>
		<item>
			<title><![CDATA[Re: AHK: Метод класса __Set()]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=141962#p141962</link>
			<description><![CDATA[<p>Но при этом значение не только помещается в &quot;storage&quot;, но ещё и дублируется в атрибуте &quot;obj&quot;. Соответственно, __Get(), при этом не вызывается, когда происходит обращение в &quot;MsgBox,% obj.data_03&quot;.<br /></p><div class="codebox"><pre><code>class Test
{
	__New(data_01, data_02) {
		this.data_01 := data_01
		this.data_02 := data_02
		this.storage := {}
	}
	
	__Get(key) {
		MsgBox, Call Get()
		return this.storage[key]
	}
	
	__Set(key, value) {
		If (key != &quot;storage&quot;)
			this.storage[key] := value
	}
}

obj := new Test(&quot;data_01&quot;, &quot;data_02&quot;)

MsgBox,% obj.data_01
MsgBox,% obj.data_02

obj[&quot;data_03&quot;] := &quot;test&quot;
MsgBox,% obj.data_03

for k, v in obj
	MsgBox,% &quot;from obj =&gt; &quot; k &quot; = &quot; v

for k, v in obj.storage
	MsgBox,% &quot;from obj.storage =&gt; &quot; k &quot; = &quot; v</code></pre></div>]]></description>
			<author><![CDATA[null@example.com (KusochekDobra)]]></author>
			<pubDate>Wed, 02 Sep 2020 19:43:29 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=141962#p141962</guid>
		</item>
		<item>
			<title><![CDATA[Re: AHK: Метод класса __Set()]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=141960#p141960</link>
			<description><![CDATA[<div class="codebox"><pre><code>	__Set(key, value) {
		If (key != &quot;storage&quot;)
			this.storage[key] := value
	}</code></pre></div>]]></description>
			<author><![CDATA[null@example.com (KusochekBobra)]]></author>
			<pubDate>Wed, 02 Sep 2020 18:10:01 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=141960#p141960</guid>
		</item>
		<item>
			<title><![CDATA[AHK: Метод класса __Set()]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=141959#p141959</link>
			<description><![CDATA[<p>Всем добра!</p><p>В справке сказано, что он вызывается для всякого атрибута, имя которого не было найдено при попытке присвоить ему значение. Но ведь на момент создания класса, конструктор __New() как раз занимается тем, что присваивает несуществующим атрибутам новые значения, а раз так, то следующий пример превращается в бесконечную рекурсию:<br /></p><div class="codebox"><pre><code>class Test
{
	__New(data_01, data_02) {
		this.data_01 := data_01
		this.data_02 := data_02
		this.storage := {}
	}
	
	__Get(key) {
		return this.storage[key]
	}
	
	__Set(key, value) {
		this.storage[key] := value
	}
}

obj := new Test(&quot;data_01&quot;, &quot;data_02&quot;)

MsgBox,% obj.data_01
MsgBox,% obj.data_02

obj.data_03 := &quot;test&quot;
MsgBox,% obj.data_03</code></pre></div><p>Подскажите пожалуйста, как правильно записать пример выше, чтобы создание атрибутов из __New() не превращалось в рекурсию.</p>]]></description>
			<author><![CDATA[null@example.com (KusochekDobra)]]></author>
			<pubDate>Wed, 02 Sep 2020 17:41:36 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=141959#p141959</guid>
		</item>
	</channel>
</rss>
