Project

General

Profile

Bug #2206

lib/delegate: inconsistency between respond_to? and send

Added by marcandre (Marc-Andre Lafortune) over 9 years ago. Updated about 8 years ago.

Status:
Closed
Priority:
Normal
Assignee:
-
Target version:
ruby -v:
ruby 1.9.2dev (2009-10-13 trunk 25317) [x86_64-darwin10.0.0]
Backport:
[ruby-core:26080]

Description

=begin
require 'delegate'
class A
private
def private_method
:bar
end
end

x = SimpleDelegator.new(A.new)
x.respond_to?(:private_method, true) # ==> true
x.send(:private_method) # ==> NoMethodError

I expected the call to private_method to be delegated. The attached patch fixes the problem. It is not very elegant but I couldn't think of anything better.
=end


Files

delegate_send.diff (1007 Bytes) delegate_send.diff marcandre (Marc-Andre Lafortune), 10/14/2009 01:06 PM

History

#1

Updated by matz (Yukihiro Matsumoto) over 9 years ago

  • Status changed from Open to Closed
  • % Done changed from 0 to 100

=begin
This issue was solved with changeset r25372.
Marc-Andre, thank you for your reporting of the issue.
You have greatfully contributed toward Ruby.
May Ruby be with you.

=end

#2

Updated by matz (Yukihiro Matsumoto) over 9 years ago

=begin
Hi,

In message "Re: [ruby-core:26080] [Bug #2206] lib/delegate: inconsistency between respond_to? and send"
on Wed, 14 Oct 2009 13:06:09 +0900, Marc-Andre Lafortune redmine@ruby-lang.org writes:

|require 'delegate'
|class A
| private
| def private_method
| :bar
| end
|end
|
|x = SimpleDelegator.new(A.new)
|x.respond_to?(:private_method, true) # ==> true
|x.send(:private_method) # ==> NoMethodError

|I expected the call to private_method to be delegated. The attached patch fixes the problem. It is not very elegant but I couldn't think of anything better.

No, delegators should only delegate public methods. I will make
#respond_to? to warn if you specify true for its optional argument.

                        matz.

=end

Also available in: Atom PDF