Some interesting and useful syntax here! However...
I’m also partial to this trick for grabbing just the first element of an array.
family, = socket.peeraddr
This is the sort of code that really turns me off when I'm digging through Ruby. It adds no clarity and actually looks like a typo. What's wrong with this?
I do agree with you, but through some failing of my own I still quite enjoy that trick. I included it to highlight the syntax, but I'll add a note saying it's maybe not the best idea to actually use it.
Right. I think it works better in Python — although I'm partial towards `[family] = socket.peeraddr` or adding parens as the comma is a bit hard to see — because it also asserts that the RHS is a single-item iterable (or however many items you have on the left-hand side:
>>> [a] = range(1)
>>> [a] = range(2)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ValueError: too many values to unpack
and it works on any iterable (any object with #to_a in ruby).
It doesn't work as you might expect with a Hash. I'd probably recommend sticking with something like either of these unless you know you aren't going to be getting a Hash:
a = [a] unless a.is_a?(Array) # option 1
a = [*a] # option 2
> There’s one final use for the splat ( * ); when overriding methods in a subclass and calling super. If it turns out you don’t need the arguments to the method for whatever additional behaviour you’re adding, you can accept all arguments with a bare splat, then a bare super passes all arguments to super.
I thought that was the default behavior of super. Isn't it the case that a bare super by default passes all the method's original arguments? I know this has bit me in the past where I've been forced to call `super()` with empty parentheses explicitly to prevent this behavior.
You're correct, that is the default behaviour of super.
My intention wasn't to say that super only works like that when you've defined the method like `def foo( * )` but rather `def foo( * )` is an alternative to having to name your arguments when you're not even going to use them as they are automatically passed with bare super.
Nice write-up about some nifty tricks!
Ruby tricks blogs are dime a dozen but I really enjoyed this post as well as Part 1 which was posted here few weeks ago.
Looking forward to the rest of the series!
I’m also partial to this trick for grabbing just the first element of an array.
This is the sort of code that really turns me off when I'm digging through Ruby. It adds no clarity and actually looks like a typo. What's wrong with this? It's much clearer what's going on.