Observe 추가
This commit is contained in:
parent
6110938d1e
commit
3a51a6f751
7 changed files with 90 additions and 1 deletions
Binary file not shown.
|
|
@ -1518,6 +1518,30 @@
|
|||
<p>Register 안에 들어간 함수는 GC 안정성을 위해서 약한 참조로 저장됩니다. 따라서 함수를 저장해야합니다.</p>
|
||||
</details>
|
||||
</blockquote>
|
||||
<hr />
|
||||
<p><code class="highlight"><span class="o">:</span><span class="nx">Observe</span><span class="p">((</span><span class="nx">newValue</span><span class="o">:</span><span class="kt">any</span><span class="p">)</span><span class="o">-></span><span class="p">())</span></code> </p>
|
||||
<blockquote>
|
||||
<p><code class="highlight"><span class="o">:</span><span class="nx">Register</span></code>의 간소화 버전입니다. <code>:Register</code>와 다르게 자동적으로 들어간 함수를 GC 로 부터 보호하기 때문에 들어간 함수를 따로 저장 할 필요가 없으며, 인자는 <code>newValue</code> 하나만 주어집니다.</p>
|
||||
<p><code>newValue</code> 는 <code>:Add</code>, <code>:With</code>, <code>:Tween</code>, <code>:Default</code> 가 계산된 상태로 제공됩니다.</p>
|
||||
<div class="tabbed-set tabbed-alternate" data-tabs="4:1"><input checked="checked" id="__tabbed_4_1" name="__tabbed_4" type="radio" /><div class="tabbed-labels"><label for="__tabbed_4_1">간략한 용법</label></div>
|
||||
<div class="tabbed-content">
|
||||
<div class="tabbed-block">
|
||||
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal">1</span>
|
||||
<span class="normal">2</span>
|
||||
<span class="normal">3</span>
|
||||
<span class="normal">4</span>
|
||||
<span class="normal">5</span>
|
||||
<span class="normal">6</span></pre></div></td><td class="code"><div><pre><span></span><code><span class="n">myStore</span><span class="p">.</span><span class="n">test</span> <span class="o">=</span> <span class="mi">1</span>
|
||||
<span class="n">myStore</span> <span class="s2">"test"</span><span class="p">:</span><span class="n">Add</span><span class="p">(</span><span class="mi">1</span><span class="p">):</span><span class="n">Observe</span><span class="p">(</span><span class="kr">function</span><span class="p">(</span><span class="n">_</span><span class="p">,</span><span class="n">newValue</span><span class="p">)</span>
|
||||
<span class="c1">-- 값 변경시 출력됩니다</span>
|
||||
<span class="nb">print</span><span class="p">(</span><span class="n">newValue</span><span class="p">)</span>
|
||||
<span class="kr">end</span><span class="p">)</span>
|
||||
<span class="n">myStore</span><span class="p">.</span><span class="n">test</span> <span class="o">=</span> <span class="mi">2</span>
|
||||
</code></pre></div></td></tr></table></div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</blockquote>
|
||||
|
||||
|
||||
|
||||
|
|
|
|||
File diff suppressed because one or more lines are too long
Binary file not shown.
|
|
@ -1710,6 +1710,30 @@
|
|||
<p>Register 안에 들어간 함수는 GC 안정성을 위해서 약한 참조로 저장됩니다. 따라서 함수를 저장해야합니다.</p>
|
||||
</details>
|
||||
</blockquote>
|
||||
<hr />
|
||||
<p><code class="highlight"><span class="o">:</span><span class="nx">Observe</span><span class="p">((</span><span class="nx">newValue</span><span class="o">:</span><span class="kt">any</span><span class="p">)</span><span class="o">-></span><span class="p">())</span></code> </p>
|
||||
<blockquote>
|
||||
<p><code class="highlight"><span class="o">:</span><span class="nx">Register</span></code>의 간소화 버전입니다. <code>:Register</code>와 다르게 자동적으로 들어간 함수를 GC 로 부터 보호하기 때문에 들어간 함수를 따로 저장 할 필요가 없으며, 인자는 <code>newValue</code> 하나만 주어집니다.</p>
|
||||
<p><code>newValue</code> 는 <code>:Add</code>, <code>:With</code>, <code>:Tween</code>, <code>:Default</code> 가 계산된 상태로 제공됩니다.</p>
|
||||
<div class="tabbed-set tabbed-alternate" data-tabs="4:1"><input checked="checked" id="__tabbed_4_1" name="__tabbed_4" type="radio" /><div class="tabbed-labels"><label for="__tabbed_4_1">간략한 용법</label></div>
|
||||
<div class="tabbed-content">
|
||||
<div class="tabbed-block">
|
||||
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal">1</span>
|
||||
<span class="normal">2</span>
|
||||
<span class="normal">3</span>
|
||||
<span class="normal">4</span>
|
||||
<span class="normal">5</span>
|
||||
<span class="normal">6</span></pre></div></td><td class="code"><div><pre><span></span><code><span class="n">myStore</span><span class="p">.</span><span class="n">test</span> <span class="o">=</span> <span class="mi">1</span>
|
||||
<span class="n">myStore</span> <span class="s2">"test"</span><span class="p">:</span><span class="n">Add</span><span class="p">(</span><span class="mi">1</span><span class="p">):</span><span class="n">Observe</span><span class="p">(</span><span class="kr">function</span><span class="p">(</span><span class="n">_</span><span class="p">,</span><span class="n">newValue</span><span class="p">)</span>
|
||||
<span class="c1">-- 값 변경시 출력됩니다</span>
|
||||
<span class="nb">print</span><span class="p">(</span><span class="n">newValue</span><span class="p">)</span>
|
||||
<span class="kr">end</span><span class="p">)</span>
|
||||
<span class="n">myStore</span><span class="p">.</span><span class="n">test</span> <span class="o">=</span> <span class="mi">2</span>
|
||||
</code></pre></div></td></tr></table></div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</blockquote>
|
||||
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -303,3 +303,26 @@ myStore.color = Color3.fromRGB(0,255,0)
|
|||
Register 안에 들어간 함수는 GC 안정성을 위해서 약한 참조로 저장됩니다. 따라서 함수를 저장해야합니다.
|
||||
</blockquote>
|
||||
|
||||
---
|
||||
|
||||
`#!ts :Observe((newValue:any)->())`
|
||||
<blockquote markdown>
|
||||
|
||||
`#!ts :Register`의 간소화 버전입니다. `:Register`와 다르게 자동적으로 들어간 함수를 GC 로 부터 보호하기 때문에 들어간 함수를 따로 저장 할 필요가 없으며, 인자는 `newValue` 하나만 주어집니다.
|
||||
|
||||
`newValue` 는 `:Add`, `:With`, `:Tween`, `:Default` 가 계산된 상태로 제공됩니다.
|
||||
|
||||
=== "간략한 용법"
|
||||
|
||||
```lua
|
||||
myStore.test = 1
|
||||
myStore "test":Add(1):Observe(function(_,newValue)
|
||||
-- 값 변경시 출력됩니다
|
||||
print(newValue)
|
||||
end)
|
||||
myStore.test = 2
|
||||
```
|
||||
</blockquote>
|
||||
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -220,6 +220,24 @@ function module.init(shared)
|
|||
end
|
||||
return efunc
|
||||
end;
|
||||
Observe = function(s,efunc)
|
||||
local self = s.store
|
||||
local events = self.__evt
|
||||
local function update(_,newValue,key)
|
||||
local value = s:CalcWithNewValue(self,newValue,key)
|
||||
efunc(value)
|
||||
end
|
||||
insert(self.__keep,update)
|
||||
for key in gmatch(s.key,"[^,]+") do
|
||||
key = gsub(gsub(key,"^ +","")," +$","")
|
||||
local event = events[key]
|
||||
if not event then
|
||||
event = setmetatable({},week)
|
||||
events[key] = event
|
||||
end
|
||||
insert(event,update)
|
||||
end
|
||||
end;
|
||||
With = function (s,wfunc)
|
||||
-- s.wfunc = wfunc
|
||||
-- return s
|
||||
|
|
|
|||
Loading…
Reference in a new issue