https://redmine.ruby-lang.org/https://redmine.ruby-lang.org/favicon.ico?17113305112012-02-20T05:53:18ZRuby Issue Tracking SystemRuby master - Feature #6023: Add "a ?= 2" support for meaning "a = a.nil? ? 2 : a"https://redmine.ruby-lang.org/issues/6023?journal_id=239772012-02-20T05:53:18Zjudofyr (Magnus Holm)judofyr@gmail.com
<ul></ul><blockquote>
<p>I've just proposed this idea to Groovy and I thought the same semantics would be interesting to have in Ruby too:</p>
<p><a href="http://jira.codehaus.org/browse/GROOVY-5306" class="external">http://jira.codehaus.org/browse/GROOVY-5306</a></p>
<p>This is a minor, but important, difference to the "a ||= 2" syntax.</p>
<p>This would be a caching/memoization operator, and it would allow code like this:</p>
<p>a = nil<br>
a ?= false # a is false now<br>
a ?= true # a is still false</p>
<p>This contrasts with</p>
<p>a = nil<br>
a ||= false # a is false now<br>
a ||= true # a is true now</p>
</blockquote>
<p>If we want something like this, we should provide a non-assignment<br>
version too. Perl uses // for the same purpose:</p>
<p>sub foo {<br>
my ($foo, %options) = @_;<br>
$foo //= 1;<br>
my $bar = $options{bar} // 2;<br>
return ($foo, $bar)<br>
}</p>
<p>foo(undef, bar => undef) # => (1, 2)<br>
foo(0, bar => 0) # => (0, 0) (0 is false in Perl)</p>
<p>Although I suspect we rather want to use // for float/exact-division<br>
in the future.</p> Ruby master - Feature #6023: Add "a ?= 2" support for meaning "a = a.nil? ? 2 : a"https://redmine.ruby-lang.org/issues/6023?journal_id=239782012-02-20T06:53:39ZAnonymous
<ul></ul><p>Magnus Holm <a href="mailto:judofyr@gmail.com" class="email">judofyr@gmail.com</a> writes:</p>
<blockquote>
<p>If we want something like this, we should provide a non-assignment<br>
version too. Perl uses // for the same purpose:</p>
<p>sub foo {<br>
my ($foo, %options) = @_;<br>
$foo //= 1;<br>
my $bar = $options{bar} // 2;<br>
return ($foo, $bar)<br>
}</p>
<p>foo(undef, bar => undef) # => (1, 2)<br>
foo(0, bar => 0) # => (0, 0) (0 is false in Perl)</p>
<p>Although I suspect we rather want to use // for float/exact-division<br>
in the future.</p>
</blockquote>
<p>How about '??' ?</p> Ruby master - Feature #6023: Add "a ?= 2" support for meaning "a = a.nil? ? 2 : a"https://redmine.ruby-lang.org/issues/6023?journal_id=248212012-03-18T18:46:10Zshyouhei (Shyouhei Urabe)shyouhei@ruby-lang.org
<ul><li><strong>Status</strong> changed from <i>Open</i> to <i>Assigned</i></li></ul> Ruby master - Feature #6023: Add "a ?= 2" support for meaning "a = a.nil? ? 2 : a"https://redmine.ruby-lang.org/issues/6023?journal_id=271792012-06-12T22:22:25Zshevegen (Robert A. Heiler)shevegen@gmail.com
<ul></ul><p>The perl example is not very elegant.</p>
<p>When I see code like this:</p>
<p>$foo //= 1;</p>
<p>I first think that someone wants to divide via / somehow.</p>
<p>The:</p>
<p>a ?= true # a is still false</p>
<p>looks a bit weird. Was ? not used to get the ASCII value of<br>
characters before?</p>
<p>I also rarely see x = x ? y and it reminds me of ternary operator.</p> Ruby master - Feature #6023: Add "a ?= 2" support for meaning "a = a.nil? ? 2 : a"https://redmine.ruby-lang.org/issues/6023?journal_id=272192012-06-13T21:31:27Zslayer (Vlad Moskovets)devvlad@gmail.com
<ul></ul><p>I think <a class="issue tracker-2 status-6 priority-4 priority-default closed" title="Feature: ?= operator (Rejected)" href="https://redmine.ruby-lang.org/issues/6561">#6561</a> more convenient to store nil'able and false'able items</p> Ruby master - Feature #6023: Add "a ?= 2" support for meaning "a = a.nil? ? 2 : a"https://redmine.ruby-lang.org/issues/6023?journal_id=315342012-10-25T19:38:04Zyhara (Yutaka HARA)
<ul><li><strong>Target version</strong> changed from <i>2.0.0</i> to <i>2.6</i></li></ul> Ruby master - Feature #6023: Add "a ?= 2" support for meaning "a = a.nil? ? 2 : a"https://redmine.ruby-lang.org/issues/6023?journal_id=315912012-10-26T11:59:36Znobu (Nobuyoshi Nakada)nobu@ruby-lang.org
<ul><li><strong>Status</strong> changed from <i>Assigned</i> to <i>Rejected</i></li></ul>