如何找到ruby corelib的所有类?

如何找到ruby corelib的所有类?,ruby,Ruby,我需要返回所有属于ruby core的类的数组 http://ruby-doc.org/core-2.2.3/ 例如,数组应如下所示: [Array, String, Hash etc..] 也可以是字符串,例如: ['Array', 'String', 'Hash'] 这应该稍后用于查找ri的文档,但在调用ri之前-它必须只适用于ruby core docu,故意不适用于ruby的任何其他部分(这里vanilla ruby是针对一个项目的,唯一可用的常量是用户计算机上的默认ruby安装)

我需要返回所有属于ruby core的类的数组

http://ruby-doc.org/core-2.2.3/
例如,数组应如下所示:

[Array, String, Hash etc..]
也可以是字符串,例如:

['Array', 'String', 'Hash']
这应该稍后用于查找ri的文档,但在调用ri之前-它必须只适用于ruby core docu,故意不适用于ruby的任何其他部分(这里vanilla ruby是针对一个项目的,唯一可用的常量是用户计算机上的默认ruby安装)

谢谢

ObjectSpace.each_object(Class).     # Get all instances of `Class`
  reject {|klass| klass.name.nil? } # Reject singleton classes
# => [ARGF.class, ArgumentError, Array, BasicObject, Bignum, Binding, Class, 
#     Complex, Complex::compatible, Data, Dir, EOFError, Encoding, 
#     Encoding::CompatibilityError, Encoding::Converter, 
#     Encoding::ConverterNotFoundError, Encoding::InvalidByteSequenceError, 
#     Encoding::UndefinedConversionError, EncodingError, Enumerator, 
#     Enumerator::Generator, Enumerator::Lazy, Enumerator::Yielder, Errno::E2BIG, 
#     Errno::EACCES, Errno::EADDRINUSE, Errno::EADDRNOTAVAIL, Errno::EAFNOSUPPORT, 
#     Errno::EAGAIN, Errno::EALREADY, Errno::EAUTH, Errno::EBADF, Errno::EBADMSG, 
#     Errno::EBADRPC, Errno::EBUSY, Errno::ECANCELED, Errno::ECHILD, 
#     Errno::ECONNABORTED, Errno::ECONNREFUSED, Errno::ECONNRESET, Errno::EDEADLK, 
#     Errno::EDESTADDRREQ, Errno::EDOM, Errno::EDQUOT, Errno::EEXIST, 
#     Errno::EFAULT, Errno::EFBIG, Errno::EFTYPE, Errno::EHOSTDOWN, 
#     Errno::EHOSTUNREACH, Errno::EIDRM, Errno::EILSEQ, Errno::EINPROGRESS, 
#     Errno::EINTR, Errno::EINVAL, Errno::EIO, Errno::EISCONN, Errno::EISDIR, 
#     Errno::ELOOP, Errno::EMFILE, Errno::EMLINK, Errno::EMSGSIZE, 
#     Errno::EMULTIHOP, Errno::ENAMETOOLONG, Errno::ENEEDAUTH, Errno::ENETDOWN, 
#     Errno::ENETRESET, Errno::ENETUNREACH, Errno::ENFILE, Errno::ENOATTR, 
#     Errno::ENOBUFS, Errno::ENODATA, Errno::ENODEV, Errno::ENOENT, 
#     Errno::ENOEXEC, Errno::ENOLCK, Errno::ENOLINK, Errno::ENOMEM, Errno::ENOMSG, 
#     Errno::ENOPROTOOPT, Errno::ENOSPC, Errno::ENOSR, Errno::ENOSTR, 
#     Errno::ENOSYS, Errno::ENOTBLK, Errno::ENOTCONN, Errno::ENOTDIR, 
#     Errno::ENOTEMPTY, Errno::ENOTRECOVERABLE, Errno::ENOTSOCK, Errno::ENOTSUP, 
#     Errno::ENOTTY, Errno::ENXIO, Errno::EOPNOTSUPP, Errno::EOVERFLOW, 
#     Errno::EOWNERDEAD, Errno::EPERM, Errno::EPFNOSUPPORT, Errno::EPIPE, 
#     Errno::EPROCLIM, Errno::EPROCUNAVAIL, Errno::EPROGMISMATCH, 
#     Errno::EPROGUNAVAIL, Errno::EPROTO, Errno::EPROTONOSUPPORT, 
#     Errno::EPROTOTYPE, Errno::ERANGE, Errno::EREMOTE, Errno::EROFS, 
#     Errno::ERPCMISMATCH, Errno::ESHUTDOWN, Errno::ESOCKTNOSUPPORT, 
#     Errno::ESPIPE, Errno::ESRCH, Errno::ESTALE, Errno::ETIME, Errno::ETIMEDOUT, 
#     Errno::ETOOMANYREFS, Errno::ETXTBSY, Errno::EUSERS, Errno::EXDEV, 
#     Errno::NOERROR, Exception, FalseClass, Fiber, FiberError, File, File::Stat, 
#     Fixnum, Float, FloatDomainError, Gem::BasicSpecification, 
#     Gem::CommandLineError, Gem::ConflictError, Gem::DependencyError, 
#     Gem::DependencyRemovalException, Gem::DependencyResolutionError, 
#     Gem::DocumentError, Gem::EndOfYAMLException, Gem::ErrorReason, 
#     Gem::Exception, Gem::FilePermissionError, Gem::FormatException, 
#     Gem::GemNotFoundException, Gem::GemNotInHomeException, 
#     Gem::ImpossibleDependenciesError, Gem::InstallError, 
#     Gem::InvalidSpecificationException, Gem::List, Gem::LoadError, 
#     Gem::OperationNotSupportedError, Gem::Platform, Gem::PlatformMismatch, 
#     Gem::RemoteError, Gem::RemoteInstallationCancelled, 
#     Gem::RemoteInstallationSkipped, Gem::RemoteSourceException, Gem::Requirement, 
#     Gem::Requirement::BadRequirementError, Gem::RubyVersionMismatch, 
#     Gem::SourceFetchProblem, Gem::SpecificGemNotFoundException, 
#     Gem::Specification, Gem::StubSpecification, Gem::StubSpecification::StubLine, 
#     Gem::SystemExitException, Gem::UnsatisfiableDependencyError, 
#     Gem::VerificationError, Gem::Version, Hash, IO, IO::EAGAINWaitReadable, 
#     IO::EAGAINWaitWritable, IO::EINPROGRESSWaitReadable, 
#     IO::EINPROGRESSWaitWritable, IOError, IndexError, Integer, Interrupt, 
#     KeyError, LoadError, LocalJumpError, MatchData, Math::DomainError, Method, 
#     Module, Monitor, MonitorMixin::ConditionVariable, 
#     MonitorMixin::ConditionVariable::Timeout, Mutex, NameError, 
#     NameError::message, NilClass, NoMemoryError, NoMethodError, 
#     NotImplementedError, Numeric, Object, ObjectSpace::WeakMap, Proc, 
#     Process::Status, Process::Tms, Process::Waiter, Random, Range, RangeError, 
#     Rational, Rational::compatible, Regexp, RegexpError, RubyVM, RubyVM::Env, 
#     RubyVM::InstructionSequence, RuntimeError, ScriptError, SecurityError, 
#     SignalException, StandardError, StopIteration, String, StringIO, Struct, 
#     Symbol, SyntaxError, SystemCallError, SystemExit, SystemStackError, Thread, 
#     Thread::Backtrace, Thread::Backtrace::Location, Thread::ConditionVariable, 
#     Thread::Queue, Thread::SizedQueue, ThreadError, ThreadGroup, Time, 
#     TracePoint, TrueClass, TypeError, UnboundMethod, UncaughtThrowError, 
#     ZeroDivisionError, fatal]
然而,请注意,通过人为地将自己限制在类中,您错过了在模块中定义的一些相当重要的方法,例如
Kernel\puts
Kernel\require

我从列表中删除了单例类,因为它会变得太混乱,但不幸的是,这意味着您现在缺少了,例如,
使用
,这是在通常称为
main
的匿名顶级对象的单例类中定义的

您还错过了非类或模块的预定义值,例如
Float::INFINITY
true
false
nil
,等等

还要注意,这将返回加载的所有类,不仅是来自核心库的类,还包括特定于实现的类。例如,整个
RubyVM
名称空间是YARV的私有内部实现细节,在其他Ruby实现中不存在。同样地,
Fixnum
Bignum
也不保证存在,Ruby语言规范只保证存在一个
Integer
类,该类可能有也可能没有零个或多个特定于实现的子类


要保证代码在所有Ruby实现上运行,更好的方法是限制自己使用该语言,.

中定义的模块和类可以通过参数
Class
@caryswovel查看,值得一提的是
ObjectSpace
将不包括类定义(如果尚未加载)。@SimoneCarletti:核心库的定义大致如下:“无需加载任何内容即可使用的对象集”。