如何动态地确定私有方法?

它似乎不起作用:


class Test
private

define_method :private_method do
"uh!"
end
end

puts Test.new.private_method
已邀请:

涵秋

赞同来自:

Test.instance_eval { private :private_method }


或者刚跑步


private :private_method


从课堂上
Test

.

帅驴

赞同来自:

似乎自从 Ruby 2.1,
define_method

关系
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!


/我明白这是一个古老的问题,但我不小心偶然发现了他 Google./
</test:0x00000102014598></main>

知食

赞同来自:

Module#private

接受方法名称的可选参数:


class Test
private :private_method
end


前面的,当然是等同的


Test.private :private_method # doesn't work


除了那个
Module#private

它是私有的,所以您必须使用反射来绕过访问限制:


Test.send :private, :private_method


不是
eval

需要。

要回复问题请先登录注册