From: nobu@... Date: 2019-11-28T05:22:20+00:00 Subject: [ruby-core:96008] [Ruby master Misc#16260] Symbol#to_proc behaves like lambda, but doesn't aknowledge it Issue #16260 has been updated by nobu (Nobuyoshi Nakada). https://github.com/ruby/ruby/pull/2708 ---------------------------------------- Misc #16260: Symbol#to_proc behaves like lambda, but doesn't aknowledge it https://bugs.ruby-lang.org/issues/16260#change-82846 * Author: zverok (Victor Shepelev) * Status: Open * Priority: Normal * Assignee: ---------------------------------------- Seems that `Symbol#to_proc` returns `Proc` that has lambda semantics: ```ruby proc = :+.to_proc proc.call(1, 2) # => 3 proc.call([1, 2]) # ArgumentError (wrong number of arguments (given 0, expected 1)) ``` But if you ask... ```ruby proc.lambda? # => false ``` That seems to be an inconsistency, which I'd like to clarify. There are obviously two ways to fix it: 1. Make it respond `true` to `lambda?` (and mention the semantics in docs) 2. Make it behave like non-lambda. The second one seems to produce some useful behavior: ```ruby # Currently: [1, 2].zip([3, 4]).map(&:+) # ArgumentError (wrong number of arguments (given 0, expected 1)) # With non-lambda: class Symbol def to_proc proc { |o, *a| o.send(self, *a) } end end [1, 2].zip([3, 4]).map(&:+) # => [4, 6] ``` Probably all of it was discussed when `Symbol#to_proc` was introduced, but as old NEWS-files doesn't link to tickets/discussions, I can't find the reasoning for current behavior. -- https://bugs.ruby-lang.org/ Unsubscribe: