nie wydają się działać:Jak dynamicznie definiować metodę jako prywatną?
class Test
private
define_method :private_method do
"uh!"
end
end
puts Test.new.private_method
nie wydają się działać:Jak dynamicznie definiować metodę jako prywatną?
class Test
private
define_method :private_method do
"uh!"
end
end
puts Test.new.private_method
Test.instance_eval { private :private_method }
Albo po prostu uruchomić
private :private_method
od wewnątrz klasy Test
.
Module#private
pobiera opcjonalny argument o nazwie metody:
class Test
private :private_method
end
Powyższe ekwiwalentu oczywiście
Test.private :private_method # doesn't work
Poza tym Module#private
jest prywatny, więc trzeba użyć refleksji obejście ograniczenia dostępu:
Test.send :private, :private_method
Niezbędne jest nr eval
.
Wydaje się, że wychodząc z Ruby 2.1, define_method
szanuje private
:
$ rvm 2.1.0
$ ruby /tmp/test.rb
/tmp/test.rb:10:in `<main>': private method `private_method' called for #<Test:0x00000102014598> (NoMethodError)
$ rvm 2.0
$ ruby /tmp/test.rb
uh!
(zdaję sobie sprawę, że jest to stare pytanie, ale zdarzyło mi się po niej przez Google).
że było łatwo, dziękuję ! :RE – knoopx