From: artur.roszczyk@... Date: 2018-02-05T17:39:20+00:00 Subject: [ruby-core:85409] [CommonRuby Feature#13581] Syntax sugar for method reference Issue #13581 has been updated by sevos (Artur Roszczyk). Have we ruled out `map(&obj:method)` syntax? Intuitively I find it consistent with `Symbol#to_proc` ~~~ ruby class Foo def initialize(array) @array = array end def call @array .map(&Math:sqrt) .map(&self:magic) .map(&self:boo(2.0)) .map(&:ceil) .each(&Kernel:puts) end private def magic(x) x ** 3 end def boo(a, b) a / b end end ~~~ Alternatively, I am for triple colon: ~~~ ruby class Foo def initialize(array) @array = array end def call @array .map(&Math:::sqrt) .map(&self:::magic) .map(&:::boo(2.0)) # with triple colon we could omit self .map(&:ceil) .each(&Kernel:::puts) end private def magic(x) x ** 3 end def boo(a, b) a / b end end ~~~ This could translate to: ~~~ruby class Foo def initialize(array) @array = array end def call @array .map { |x| Math.public_send(:sqrt, x) } .map { |x| self.send(:magic, x) } .map { |x| self.send(:boo, x, 2.0) } .map { |x| x.ceil } .each { |x| Kernel.public_send(:puts, x) } end private def magic(x) x ** 3 end def boo(a, b) a / b end end ~~~ Applying additional arguments (aka `.map(&self:boo(2.0))` is just a proposal - I am not sure if this should be even possible - `Symbol#to_proc` does not allow that. Another interesting question which we need to answer is: **What visibility scope should be used when making a method call?** Given the syntax `receiver:method` or `receiver:::method` if the receiver is `self` then we should expand this syntax sugar to `send()` allowing accessing the private interface of the current object (which is not the item from the iterator - we would use symbol to proc in that case). However, if the receiver is something else, we should expand to `public_send` to disallow accessing private methods of other objects. Just my two cents ;) Cheers, Artur ---------------------------------------- Feature #13581: Syntax sugar for method reference https://bugs.ruby-lang.org/issues/13581#change-70195 * 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: