https://bugs.ruby-lang.org/
https://bugs.ruby-lang.org/favicon.ico?1711330511
2016-02-09T15:41:08Z
Ruby Issue Tracking System
Ruby master - Feature #12059: `Array#single?`, `Hash#single?`
https://bugs.ruby-lang.org/issues/12059?journal_id=56935
2016-02-09T15:41:08Z
sikachu (Prem Sichanugrist)
s+ruby@sikac.hu
<ul></ul><p>I feel like the usage of this method wouldn't be generic enough, and could be accomplished easily by <code>.size.one?</code></p>
Ruby master - Feature #12059: `Array#single?`, `Hash#single?`
https://bugs.ruby-lang.org/issues/12059?journal_id=56936
2016-02-09T16:31:57Z
mame (Yusuke Endoh)
mame@ruby-lang.org
<ul></ul><p>I'm neutral for the proposal itself. If it is accepted, I think "singleton?" is the best name.</p>
<blockquote>
<p>In mathematics, a singleton ... is a set with exactly one element.</p>
<p><a href="https://en.wikipedia.org/wiki/Singleton_(mathematics)" class="external">https://en.wikipedia.org/wiki/Singleton_(mathematics)</a></p>
</blockquote>
<p>--<br>
Yusuke Endoh <a href="mailto:mame@ruby-lang.org" class="email">mame@ruby-lang.org</a></p>
Ruby master - Feature #12059: `Array#single?`, `Hash#single?`
https://bugs.ruby-lang.org/issues/12059?journal_id=56939
2016-02-09T21:51:33Z
danielpclark (Daniel P. Clark)
6ftdan@gmail.com
<ul></ul><p>Ruby currently supports the <code>one?</code> method on both Hash and Array.</p>
<pre><code class="ruby syntaxhl" data-language="ruby"><span class="p">[</span><span class="mi">1</span><span class="p">].</span><span class="nf">one?</span>
<span class="c1"># => true </span>
<span class="p">{</span><span class="ss">a: </span><span class="mi">1</span><span class="p">}.</span><span class="nf">one?</span>
<span class="c1"># => true </span>
<span class="p">[</span><span class="mi">1</span><span class="p">].</span><span class="nf">method</span><span class="p">(</span><span class="ss">:one?</span><span class="p">).</span><span class="nf">owner</span>
<span class="c1"># => Enumerable </span>
</code></pre>
Ruby master - Feature #12059: `Array#single?`, `Hash#single?`
https://bugs.ruby-lang.org/issues/12059?journal_id=56940
2016-02-10T02:11:27Z
nobu (Nobuyoshi Nakada)
nobu@ruby-lang.org
<ul></ul><p><code>[1, false, nil].one?</code> also returns <code>true</code>.</p>
<p>From <code>ri Enumerable#one?</code>:</p>
<hr>
<pre><code>enum.one? [{ |obj| block }] -> true or false
</code></pre>
<hr>
<p>Passes each element of the collection to the given block. The method returns<br>
<code>true</code> if the block returns true exactly once. If the block is not given, <code>one?</code><br>
will return true only if exactly one of the collection members is true.</p>
<pre><code class="ruby syntaxhl" data-language="ruby"><span class="sx">%w{ant bear cat}</span><span class="p">.</span><span class="nf">one?</span> <span class="p">{</span> <span class="o">|</span><span class="n">word</span><span class="o">|</span> <span class="n">word</span><span class="p">.</span><span class="nf">length</span> <span class="o">==</span> <span class="mi">4</span> <span class="p">}</span> <span class="c1">#=> true</span>
<span class="sx">%w{ant bear cat}</span><span class="p">.</span><span class="nf">one?</span> <span class="p">{</span> <span class="o">|</span><span class="n">word</span><span class="o">|</span> <span class="n">word</span><span class="p">.</span><span class="nf">length</span> <span class="o">></span> <span class="mi">4</span> <span class="p">}</span> <span class="c1">#=> false</span>
<span class="sx">%w{ant bear cat}</span><span class="p">.</span><span class="nf">one?</span> <span class="p">{</span> <span class="o">|</span><span class="n">word</span><span class="o">|</span> <span class="n">word</span><span class="p">.</span><span class="nf">length</span> <span class="o"><</span> <span class="mi">4</span> <span class="p">}</span> <span class="c1">#=> false</span>
<span class="p">[</span> <span class="kp">nil</span><span class="p">,</span> <span class="kp">true</span><span class="p">,</span> <span class="mi">99</span> <span class="p">].</span><span class="nf">one?</span> <span class="c1">#=> false</span>
<span class="p">[</span> <span class="kp">nil</span><span class="p">,</span> <span class="kp">true</span><span class="p">,</span> <span class="kp">false</span> <span class="p">].</span><span class="nf">one?</span> <span class="c1">#=> true</span>
</code></pre>
Ruby master - Feature #12059: `Array#single?`, `Hash#single?`
https://bugs.ruby-lang.org/issues/12059?journal_id=56941
2016-02-10T04:02:51Z
danielpclark (Daniel P. Clark)
6ftdan@gmail.com
<ul></ul><p>Right. Given the original examples by the OP <code>Enumerable#one?</code> works.</p>
<pre><code class="ruby syntaxhl" data-language="ruby"><span class="n">a</span> <span class="o">=</span> <span class="p">[</span><span class="s2">"object1"</span><span class="p">,</span> <span class="s2">"object2"</span><span class="p">]</span>
<span class="s2">"There </span><span class="si">#{</span><span class="n">a</span><span class="p">.</span><span class="nf">one?</span> <span class="p">?</span> <span class="s2">"is"</span> <span class="p">:</span> <span class="s2">"are"</span><span class="si">}</span><span class="s2"> </span><span class="si">#{</span><span class="n">a</span><span class="p">.</span><span class="nf">length</span><span class="si">}</span><span class="s2"> </span><span class="si">#{</span><span class="n">a</span><span class="p">.</span><span class="nf">one?</span> <span class="p">?</span> <span class="s2">"object"</span> <span class="p">:</span> <span class="s2">"objects"</span><span class="si">}</span><span class="s2">."</span>
<span class="c1"># => "There are 2 objects."</span>
<span class="p">[</span><span class="mi">1</span><span class="p">,</span> <span class="mi">2</span><span class="p">,</span> <span class="mi">2</span><span class="p">,</span> <span class="mi">1</span><span class="p">].</span><span class="nf">uniq</span><span class="p">.</span><span class="nf">one?</span>
<span class="c1"># => false</span>
<span class="p">[</span><span class="mi">1</span><span class="p">,</span> <span class="mi">1</span><span class="p">,</span> <span class="mi">1</span><span class="p">,</span> <span class="mi">1</span><span class="p">].</span><span class="nf">uniq</span><span class="p">.</span><span class="nf">one?</span>
<span class="c1"># => true</span>
</code></pre>