Najbliższe, co mogę znaleźć, to In Ruby, how do I check if method "foo=()" is defined?, ale działa tylko wtedy, gdy metoda jest jawna, nawet jeśli znajduje się w bloku klasy.Jak sprawdzić, czy metoda prywatna jest zdefiniowana w ruby?
Czego chcę:
class Foo
private
def bar
"bar"
end
magic_private_method_defined_test_method :bar #=> true
end
Co próbowałem:
class Foo
private
def bar
"bar"
end
respond_to? :bar #=> false
#this actually calls respond_to on the class, and so respond_to :superclass gives true
defined? :bar #=> nil
instance_methods.include?(:bar) #=> false
methods.include?(:bar) #=> false
method_defined?(:bar) #=> false
def bar
"redefined!"
end # redefining doesn't cause an error or anything
public
def bar
"redefined publicly!"
end #causes no error, behaves no differently whether or not #bar had been defined previously
end
Nota boczna: Byłem * właściwie * zastanawiałem się nad tym i odkryłem odpowiedź w trakcie pisania pytania. Zamieszczone tutaj, ponieważ nie mogłem łatwo znaleźć odpowiedzi, więc mam nadzieję, że następna osoba będzie w stanie. – Shelvacu