From: alex.wayfer@... Date: 2018-11-15T10:02:27+00:00 Subject: [ruby-core:89807] [CommonRuby Feature#13581] Syntax sugar for method reference Issue #13581 has been updated by AlexWayfer (Alexander Popov). zverok (Victor Shepelev) wrote: > @nobu > > > If `.:` will be introduced, I think it should obey that syntax too, and allowing it without the receiver feels confusing. > > Can you please show some example of confusing statements? I can't think of any from the top of my head, it seems that (if the parser can handle it), the context for `.:something` and `.something` is always clearly different. > > I am concerned about receiver-less version because in our current codebase we found this idiom to be particularly useful: > > ```ruby > # in a large data-processing class > some_input > .compact > .map(&method(:process_item)) # it is private method of current class > .reject(&method(:spoiled?)) > .tap(&method(:pp)) # temp debugging statement > .group_by(&method(:grouping_criterion)) > .yield_self(&method(:postprocess)) > > # which I'd be really happy to see as > some_input > .compact > .map(&.:process_item) > .reject(&.:spoiled?) > .tap(&.:pp) > .group_by(&.:grouping_criterion) > .then(&.:postprocess) > > ``` > Having to explicitly state `map(&self.:process_item)` is much less desirable. Just an opinion: ```ruby processed = some_input .compact .map { |element| ProcessingItem.new(element) } # or `.map(&ProcessingItem.method(:new))` .reject(&:spoiled?) .each(&:pp) # temp debugging statement .group_by(&:grouping_criterion) postprocess processed ``` Or you can even use `ProcessingItems` collection class. With itself state and behavior. Instead of bunch of private methods in a processing class with the same (collection) argument. ---------------------------------------- Feature #13581: Syntax sugar for method reference https://bugs.ruby-lang.org/issues/13581#change-74869 * Author: americodls (Americo Duarte) * Status: Open * Priority: Normal * Assignee: * Target version: ---------------------------------------- Some another programming languages (even Java, in version 8) has a cool way to refer a method as a reference. I wrote some examples here: https://gist.github.com/americodls/20981b2864d166eee8d231904303f24b I miss this thing in ruby. I would thinking if is possible some like this: ~~~ roots = [1, 4, 9].map &Math.method(:sqrt) ~~~ Could be like this: ~~~ roots = [1, 4, 9].map Math->method ~~~ What do you guys thinking about it? -- https://bugs.ruby-lang.org/ Unsubscribe: