From: dan.j.allen@... Date: 2017-03-15T00:06:24+00:00 Subject: [ruby-core:80167] [Ruby trunk Misc#13283] Disable `&' interpreted as argument prefix warning when passing symbol to Enumerable#map Issue #13283 has been updated by mojavelinux (Dan Allen). > Just looking in stdlib, `Set#&` means set intersection, and anyone can define `#&` on any class they like to mean whatever makes sense to them - that's the joy of ruby. Now I understand where the conflict is. Thank you for pointing that out. However, I still say that in this case, it's actually impossible to create this situation. Consider the following: ``` class Enumerator def & arg puts '& method called on Enumerator with arg ' + arg.to_s end end [1, 2, 3].map &:name ``` That results in: ``` in `map': undefined method `name' for 1:Fixnum (NoMethodError) ``` Only if I remove the space (or add a ".") will it work: ``` [1, 2, 3].map&:name ``` Perhaps that is an implementation detail, but every implementation does the same thing. Visual inspection is enough to determine what will happen. And I'm pretty sure a test in ruby spec could validate this. > it seems so much simpler to retain the warning and accept that there are some occasions when parens are either necessary or advisable to disambiguate the syntax. All I'm pointing out is that's where Ruby becomes not my best friend. ---------------------------------------- Misc #13283: Disable `&' interpreted as argument prefix warning when passing symbol to Enumerable#map https://bugs.ruby-lang.org/issues/13283#change-63606 * Author: mojavelinux (Dan Allen) * Status: Open * Priority: Normal * Assignee: ---------------------------------------- A common idiom in Ruby is to pass a symbol reference to `Enumerable#map`, which in turn invokes the corresponding method on each entry. Case in point: ~~~ %(a b c).map &:upcase ~~~ Yet, when warnings are enabled, this line produces the following warning: ~~~ warning: `&' interpreted as argument prefix ~~~ Perhaps we can all agree that's what this statement *should* do, and in fact Ruby does it. So there's really no reason for this warning. The alternative, a bitwise operation on a symbol, makes little sense. That's especially when the bitwise operator is directly adjacent to the symbol. The workaround to squelch the warning is to add parentheses: ~~~ %(a b c).map(&:upcase) ~~~ However, it's one of the few cases in Ruby where parentheses are mandatory (for an isolated statement). For those of us who prefer to drop parentheses for code style, this is an irritation. It's also one of the most common warnings I've seen Ruby report when warnings are enabled, so it's also just noisy. Can this warning be removed? -- https://bugs.ruby-lang.org/ Unsubscribe: