从Sinatra::Base派生的Ruby类有私有方法,但它们在irb控制台中消失了
我需要访问一个Ruby类中一些私有方法中的一些功能,这个Ruby类是从Sinatra::Base派生的 类定义是这样开始的:从Sinatra::Base派生的Ruby类有私有方法,但它们在irb控制台中消失了,ruby,sinatra,Ruby,Sinatra,我需要访问一个Ruby类中一些私有方法中的一些功能,这个Ruby类是从Sinatra::Base派生的 类定义是这样开始的: class Geminabox < Sinatra::Base get '/' do @gems = load_gems @index_gems = index_gems(@gems) erb :index end g=Geminabox.new 其中“load_gems”和“index_gems”是同一类中稍后定义的私有方法
class Geminabox < Sinatra::Base
get '/' do
@gems = load_gems
@index_gems = index_gems(@gems)
erb :index
end
g=Geminabox.new
其中“load_gems”和“index_gems”是同一类中稍后定义的私有方法
但是,如果我将此类加载到irb控制台并创建如下实例:
class Geminabox < Sinatra::Base
get '/' do
@gems = load_gems
@index_gems = index_gems(@gems)
erb :index
end
g=Geminabox.new
然后尝试查看我得到的私有方法:
> 2.2.1 :005 > g.private_methods(false)
=> [:initialize]
> 2.2.1 :006 >
没有“加载宝石”,没有“索引宝石”等,我不能使用“发送”调用任何一个:
2.2.1 :007 > g.send(:load_gems)
NoMethodError: undefined method `load_gems' for #<Geminabox app_file="/apps/geminabox/lib/geminabox.rb">
from (irb):7
from /usr/local/rvm/rubies/ruby-2.2.1/bin/irb:11:in `<main>'
2.2.1 :008 >
2.2.1:007>g.send(:加载宝石)
NoMethodError:未定义的方法“加载宝石”#
来自(irb):7
from/usr/local/rvm/rubies/ruby-2.2.1/bin/irb:11:in`'
2.2.1 :008 >
我不明白为什么,我希望有人能启发我。Sinatra::Base的特征类覆盖 您可以检查
Geminabox.new
是否实际返回了Sinatra::Wrapper
的实例:
Class.new(Sinatra::Base).new.class
#⇒ Sinatra::Wrapper
要获得您想要的,请使用:
Geminabox.private_instance_methods false
g、 类返回Sinatra::Wrapper,该类没有私有方法。如果需要基本私有方法,请尝试Geminabox.superclass