Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/amazon-web-services/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
从Sinatra::Base派生的Ruby类有私有方法,但它们在irb控制台中消失了_Ruby_Sinatra - Fatal编程技术网

从Sinatra::Base派生的Ruby类有私有方法,但它们在irb控制台中消失了

从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”是同一类中稍后定义的私有方法

我需要访问一个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”是同一类中稍后定义的私有方法

但是,如果我将此类加载到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