Project

General

Profile

Actions

Bug #2397

closed

cannot call public'ed method via public_method

Added by mame (Yusuke Endoh) almost 16 years ago. Updated over 14 years ago.

Status:
Closed
Target version:
-
ruby -v:
Backport:
[ruby-dev:39767]

Description

=begin
遠藤です。

継承先のクラスで public にしたメソッドを public_method で取り出して
呼び出すと undefined private method と言われてしまいます。

class C
def foo; "FOO"; end
private :foo
end
class D < C
public :foo
end
p D.new.public_method(:foo).call
#=> undefined private method foo' for class D' (NameError)

これは呼び出せるのが正解ということでいいでしょうか。

Index: proc.c

--- proc.c (revision 25895)
+++ proc.c (working copy)
@@ -894,6 +894,7 @@
struct METHOD *data;
rb_method_entry_t *me, meb;
rb_method_definition_t *def = 0;

  • rb_method_flag_t flag = NOEX_UNDEF;
again:
  me = rb_method_entry(klass, id);

@@ -921,8 +922,11 @@
rb_print_undef(klass, id, 0);
}
def = me->def;

  • if (scope && (me->flag & NOEX_MASK) != NOEX_PUBLIC) {
  • rb_print_undef(rclass, def->original_id, (int)(me->flag & NOEX_MASK));
  • if (flag == NOEX_UNDEF) {
  • flag = me->flag;
  • if (scope && (flag & NOEX_MASK) != NOEX_PUBLIC) {
  •  rb_print_undef(rclass, def->original_id, (int)(flag & NOEX_MASK));
    
  • }
    }
    if (def && def->type == VM_METHOD_TYPE_ZSUPER) {
    klass = RCLASS_SUPER(me->klass);

--
Yusuke ENDOH
=end

Actions

Also available in: Atom PDF

Like0
Like0Like0