ruby-core@ruby-lang.org archive (unofficial mirror)
 help / color / mirror / Atom feed
From: transfire@gmail.com
To: ruby-core@ruby-lang.org
Subject: [ruby-core:71324] [Ruby trunk - Feature #11537] Introduce "Safe navigation operator"
Date: Wed, 04 Nov 2015 00:07:09 +0000	[thread overview]
Message-ID: <redmine.journal-54699.20151104000708.bccfda43a1360038@ruby-lang.org> (raw)
In-Reply-To: redmine.issue-11537.20150918092909@ruby-lang.org

Issue #11537 has been updated by Thomas Sawyer.


Philip Claren wrote:
> Thomas Sawyer wrote:
> > In this way is more an extension of the ternary operator -- the initial dot on the method signals the difference. This should also allow:
> > 
> >     u ? .profile ? .thumbnails ? .large : default
> 
> Although I agree that .? is not that intuitive to read, the extended ternary operator would have a problem: boolean false passes for the safe navigator (because it's a valid value) but not for the ternary operator.

Is allowing false necessary/useful? On the other hand, if it is, then might a nil-only ternary operator be useful too (regardless of this issue)?




----------------------------------------
Feature #11537: Introduce "Safe navigation operator"
https://bugs.ruby-lang.org/issues/11537#change-54699

* Author: Hiroshi SHIBATA
* Status: Closed
* Priority: Normal
* Assignee: Yukihiro Matsumoto
----------------------------------------
I sometimes write following code with rails application:

```ruby
u = User.find(id)
if u && u.profile && u.profile.thumbnails && u.profiles.thumbnails.large
  ...
```

or

```ruby
# Use ActiveSupport
if u.try!(:profile).try!(:thumbnails).try!(:large)
 ...
```
I hope to write shortly above code. Groovy has above operator named "Safe navigation operator" with "`?.`" syntax.
Ruby can't use "`?.`" operator.

Can we use "`.?`" syntax. like this:

```ruby
u = User.find(id)
u.?profile.?thumbnails.?large
```

Matz. How do you think about this?




-- 
https://bugs.ruby-lang.org/

  parent reply	other threads:[~2015-11-03 23:38 UTC|newest]

Thread overview: 48+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
     [not found] <redmine.issue-11537.20150918092909@ruby-lang.org>
2015-09-18  9:29 ` [ruby-core:70854] [Ruby trunk - Feature #11537] [Open] Introduce "Safe navigation operator" shibata.hiroshi
2015-09-18  9:31   ` [ruby-core:70855] " P.S.V.R
2015-09-18 14:34 ` [ruby-core:70856] [Ruby trunk - Feature #11537] " rr.rosas
2015-09-19  0:42 ` [ruby-core:70861] " nobu
2015-09-19  4:09 ` [ruby-core:70862] " matthew
2015-09-23 17:04 ` [ruby-core:70892] " rr.rosas
2015-10-07 14:30 ` [ruby-core:71012] " matz
2015-10-07 16:51 ` [ruby-core:71015] " sawadatsuyoshi
2015-10-21  7:45 ` [ruby-core:71129] " matz
2015-10-21  8:05 ` [ruby-core:71130] " matz
2015-10-21 10:21 ` [ruby-core:71132] " rr.rosas
2015-10-21 19:29 ` [ruby-core:71135] " ruby-core
2015-10-21 23:33 ` [ruby-core:71137] " nobu
2015-10-22 16:29 ` [ruby-core:71157] " treznick
2015-10-22 16:34 ` [ruby-core:71158] " ary
2015-10-22 16:45 ` [ruby-core:71160] " merch-redmine
2015-10-22 21:19   ` [ruby-core:71166] " Matthew Kerwin
2015-10-23  3:58 ` [ruby-core:71169] " treznick
2015-10-26  5:10 ` [ruby-core:71182] " transfire
2015-10-26 11:22 ` [ruby-core:71184] " garysweaver
2015-10-26 12:25 ` [ruby-core:71186] " wycats
2015-10-26 13:28 ` [ruby-core:71189] " nobu
2015-10-26 13:58 ` [ruby-core:71190] " rr.rosas
2015-10-27  9:13 ` [ruby-core:71213] " philip.claren
2015-10-27 11:47 ` [ruby-core:71215] " rr.rosas
2015-10-27 12:01 ` [ruby-core:71216] " mame
2015-10-27 12:07 ` [ruby-core:71217] " rr.rosas
2015-10-27 12:24 ` [ruby-core:71218] " mame
2015-10-27 12:31 ` [ruby-core:71219] " rr.rosas
2015-10-27 12:45 ` [ruby-core:71220] " mame
2015-10-27 14:31 ` [ruby-core:71221] " matz
2015-10-29 19:32 ` [ruby-core:71271] " alonecomp
2015-10-29 21:00   ` [ruby-core:71273] " Matthew Kerwin
2015-11-04  0:01 ` [ruby-core:71322] " transfire
2015-11-04  0:07 ` transfire [this message]
2015-11-04  0:32 ` [ruby-core:71325] " nobu
2015-11-04  0:44 ` [ruby-core:71326] " matz
2015-11-05 23:01 ` [ruby-core:71360] " tom.enebo
2015-11-05 23:42   ` [ruby-core:71361] " Eric Wong
2015-11-06  1:25 ` [ruby-core:71363] " matz
2015-11-06  1:50 ` [ruby-core:71364] " tom.enebo
2015-11-06  2:21 ` [ruby-core:71365] " nobu
2015-11-06  4:16 ` [ruby-core:71370] [Ruby trunk - Feature #11537] [Open] " shugo
2015-11-06 18:06 ` [ruby-core:71373] [Ruby trunk - Feature #11537] " rr.rosas
2015-11-07  0:49 ` [ruby-core:71374] " nobu
2015-11-07  2:32 ` [ruby-core:71375] " ko1
2015-11-09 14:39 ` [ruby-core:71417] " tom.enebo
2015-11-13 10:46 ` [ruby-core:71483] " uwe

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-list from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

  List information: https://www.ruby-lang.org/en/community/mailing-lists/

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=redmine.journal-54699.20151104000708.bccfda43a1360038@ruby-lang.org \
    --to=ruby-core@ruby-lang.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).