有没有办法通过IRB查看实例可用的特定于类的方法?
我创建了一个URI类的实例,然后按 Tab 来查看我可以使用的方法,但是我看到了100种可能性:
1.9.3p286 :001 > require 'uri'
=> true
1.9.3p286 :002 > uri = URI('http://game.dl.a-steroids.com/TrafficServer/')
=> #<URI::HTTP:0x00000000eae390 URL:http://game.dl.a-steroids.com/TrafficServer/>
1.9.3p286 :008 > uri.
Display all 102 possibilities? (y or n)
我想只过滤该实例的具体方法,例如此处描述的方法:http://www.ruby-doc.org/stdlib-1.9.3/libdoc/uri/rdoc/URI.html或以下:
1.9.3p286 :003 > uri.host
=> "game.dl.a-steroids.com"
1.9.3p286 :006 > uri.path
=> "/TrafficServer/"
1.9.3p286 :007 > uri.scheme
=> "http"
答案 0 :(得分:4)
URI
是一个模块。它不能有实例,也没有实例方法。要查看在URI
上直接定义的模块方法,请执行:
URI.methods(false)
#=&gt; [:scheme_list,:split,:parse,:join,:extract,:regexp, :encode_www_form_component,:decode_www_form_component, :encode_www_form,:decode_www_form]
URI(...)
创建的是URI:HTTP
的实例。要查看在URI::HTTP
上直接定义的实例方法,请执行以下操作:
URI::HTTP.instance_methods(false)
#=&gt; [:REQUEST_URI]
<小时/> 如果这看起来太窄,你可以升级到一个超类。
URI
个类基于URI::Generic
,
URI::HTTP.superclass
#=&gt; URI ::通用
同样如此:
URI::Generic.instance_methods(false)
#=&GT; [:default_port,:scheme,:host,:port,:registry,:path,:query,:opaque,:fragment,:parser,:component,:set_scheme,:scheme =, :userinfo =,:user =,:password =,:set_userinfo,:set_user, :set_password,:userinfo,:user,:password,:set_host,:host =, :hostname,:hostname =,:set_port,:port =,:set_registry,:registry =, :set_path,:path =,:set_query,:query =,:set_opaque,:opaque =, :set_fragment,:fragment =,:hierarchical?,:absolute?,:absolute, :relative?,:merge!,:merge,:+ ,: route_from,: - ,:route_to, :normalize,:normalize!,:to_s,:==,:hash,:eql?,:component_ary, :select,:inspect,:coerce]
答案 1 :(得分:1)
我经常在IRB中使用它:
uri.methods - Object.methods
=> [
:+, :-, :absolute, :absolute?, :coerce, :component, :component_ary,
:default_port, :fragment, :fragment=, :hierarchical?, :host,
:host=, :hostname, :hostname=, :merge, :merge!, :normalize,
:normalize!, :opaque, :opaque=, :parser, :password, :password=,
:path, :path=, :port, :port=, :query, :query=, :registry,
:registry=, :relative?, :request_uri, :route_from, :route_to,
:scheme, :scheme=, :select, :set_fragment, :set_host,
:set_opaque, :set_password, :set_path, :set_port, :set_query,
:set_registry, :set_scheme, :set_user, :set_userinfo, :user,
:user=, :userinfo, :userinfo=
]
答案 2 :(得分:1)
您可以在.irbrc文件中添加以下内容,然后所有对象都会获得一个#own_methods类,您可以使用它来获取该列表。
class Object
def own_methods
self.class.instance_methods - self.class.superclass.instance_methods
end
end