I'm just breaking into the ruby world and I could use a helping hand.
Suppose b
is nil
.
I'd like the following code to return nil
instead of a "NoMethodError: undefined method"
a.b.c("d").e
The first thing I tried was to overload NilClass's missing_method to simply return a nil. This is the behaviour I want except I don't want to be this intrusive.
I'd love it if I could do something like this
SafeNils.a.b.c("d").e
So it's like a clean way to locally overload the NilClass's behaviour.
I'd love to hear some ideas or great resources for digging in on this. I'm also quite open to other approaches as long as it's fairly clean.
Thank you very much.
You can use the inline rescue:
x = a.b.c("d").e rescue nil
x
will be nil
if b
is nil
.
Or, as someone commented in that link, you can use the andand gem (see docs):
x = a.andand.b.andand.c("d").andand.e
I think you can find a great solution in rails but that solution follows a different approach. Take a look at the try method. It's a clean approach.
Starting from ruby v2.3.0 there is another way built into the language, the safe navigation operator (&.)
You can write: a&.b&.c&.d
and you will safely get nil if one of the calls in the chain returns nil.
You can read more about it here:
http://mitrev.net/ruby/2015/11/13/the-operator-in-ruby/
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With