https://redmine.ruby-lang.org/
https://redmine.ruby-lang.org/favicon.ico?1711330511
2020-04-08T09:01:06Z
Ruby Issue Tracking System
Ruby master - Feature #16769: Struct.new(..., immutable: true)
https://redmine.ruby-lang.org/issues/16769?journal_id=84957
2020-04-08T09:01:06Z
k0kubun (Takashi Kokubun)
takashikkbn@gmail.com
<ul><li><strong>Tracker</strong> changed from <i>Bug</i> to <i>Feature</i></li><li><strong>Backport</strong> deleted (<del><i>2.5: UNKNOWN, 2.6: UNKNOWN, 2.7: UNKNOWN</i></del>)</li></ul>
Ruby master - Feature #16769: Struct.new(..., immutable: true)
https://redmine.ruby-lang.org/issues/16769?journal_id=84959
2020-04-08T09:03:35Z
k0kubun (Takashi Kokubun)
takashikkbn@gmail.com
<ul><li><strong>Related to</strong> <i><a class="issue tracker-2 status-5 priority-4 priority-default closed" href="/issues/16122">Feature #16122</a>: Data: simple immutable value object</i> added</li></ul>
Ruby master - Feature #16769: Struct.new(..., immutable: true)
https://redmine.ruby-lang.org/issues/16769?journal_id=84962
2020-04-08T10:45:21Z
shevegen (Robert A. Heiler)
shevegen@gmail.com
<ul></ul><p>Makes sense.</p>
Ruby master - Feature #16769: Struct.new(..., immutable: true)
https://redmine.ruby-lang.org/issues/16769?journal_id=84966
2020-04-08T18:35:49Z
Eregon (Benoit Daloze)
<ul></ul><p>Agreed, and <a class="user active user-mention" href="https://redmine.ruby-lang.org/users/3344">@ioquatix (Samuel Williams)</a> and <a class="user active user-mention" href="https://redmine.ruby-lang.org/users/286">@headius (Charles Nutter)</a> seemed positive too in some recent discussion.</p>
Ruby master - Feature #16769: Struct.new(..., immutable: true)
https://redmine.ruby-lang.org/issues/16769?journal_id=84970
2020-04-09T01:05:14Z
mame (Yusuke Endoh)
mame@ruby-lang.org
<ul></ul><p>It would be good to reuse an existing "freeze" mechanism.</p>
<pre><code class="ruby syntaxhl" data-language="ruby"><span class="no">Post</span> <span class="o">=</span> <span class="no">Struct</span><span class="p">.</span><span class="nf">new</span><span class="p">(</span><span class="ss">:id</span><span class="p">,</span> <span class="ss">:name</span><span class="p">,</span> <span class="ss">freeze: </span><span class="kp">true</span><span class="p">)</span>
<span class="n">post</span> <span class="o">=</span> <span class="no">Post</span><span class="p">.</span><span class="nf">new</span><span class="p">(</span><span class="mi">1</span><span class="p">,</span> <span class="s2">"hello world"</span><span class="p">)</span>
<span class="nb">p</span> <span class="n">post</span><span class="p">.</span><span class="nf">frozen?</span> <span class="c1">#=> true</span>
<span class="n">post</span><span class="p">.</span><span class="nf">id</span> <span class="o">=</span> <span class="mi">2</span> <span class="c1">#=> FrozenError</span>
</code></pre>
<p>I'd like to avoid the word <code>immutable</code> because it is a new terminology and a negative form.</p>
Ruby master - Feature #16769: Struct.new(..., immutable: true)
https://redmine.ruby-lang.org/issues/16769?journal_id=84972
2020-04-09T02:05:14Z
nobu (Nobuyoshi Nakada)
nobu@ruby-lang.org
<ul></ul><p>How about:</p>
<pre><code class="ruby syntaxhl" data-language="ruby"><span class="no">Freezing</span> <span class="o">=</span> <span class="o">->*</span><span class="p">{</span><span class="k">def</span> <span class="nf">initialize</span><span class="p">(</span><span class="o">...</span><span class="p">)</span> <span class="k">super</span><span class="p">;</span> <span class="nb">freeze</span><span class="p">;</span> <span class="k">end</span><span class="p">}</span>
<span class="no">Post</span> <span class="o">=</span> <span class="no">Struct</span><span class="p">.</span><span class="nf">new</span><span class="p">(</span><span class="ss">:id</span><span class="p">,</span> <span class="ss">:name</span><span class="p">,</span> <span class="o">&</span><span class="no">Freezing</span><span class="p">)</span>
</code></pre>
Ruby master - Feature #16769: Struct.new(..., immutable: true)
https://redmine.ruby-lang.org/issues/16769?journal_id=84980
2020-04-09T13:36:05Z
Eregon (Benoit Daloze)
<ul></ul><p><a class="user active user-mention" href="https://redmine.ruby-lang.org/users/4">@nobu (Nobuyoshi Nakada)</a> setter methods shouldn't be defined, so just <code>.freeze</code> is not enough.</p>
Ruby master - Feature #16769: Struct.new(..., immutable: true)
https://redmine.ruby-lang.org/issues/16769?journal_id=85002
2020-04-10T08:38:52Z
matz (Yukihiro Matsumoto)
matz@ruby.or.jp
<ul><li><strong>Status</strong> changed from <i>Open</i> to <i>Rejected</i></li></ul><p>I don't like the keyword argument that changes the fundamental behavior. I prefer <a class="issue tracker-2 status-5 priority-4 priority-default closed" title="Feature: Data: simple immutable value object (Closed)" href="https://redmine.ruby-lang.org/issues/16122">#16122</a> to this proposal.<br>
Let's discuss there.</p>
<p>Matz.</p>
Ruby master - Feature #16769: Struct.new(..., immutable: true)
https://redmine.ruby-lang.org/issues/16769?journal_id=85013
2020-04-10T12:15:46Z
Eregon (Benoit Daloze)
<ul></ul><p>Sad to see this rejected as there was a lot of agreement here, and I think <a class="issue tracker-2 status-5 priority-4 priority-default closed" title="Feature: Data: simple immutable value object (Closed)" href="https://redmine.ruby-lang.org/issues/16122">#16122</a> might take a lot longer before anything gets implemented.</p>