如何检查对象是否不是Ruby中的核心类型?

如何检查对象是否不是Ruby中的核心类型?,ruby,types,Ruby,Types,在Ruby中,与核心库中的类(如object、String、Hash、Numeric等)相比,确定对象是否属于用户定义的、gem定义的或标准库定义的类的最佳方法是什么?预定义列表 快照类 下面是我在解释器中拍摄到的对象列表: ARGF.class ArgumentError Array BasicObject Bignum Binding Class Complex Data Dir EOFError Encoding Encoding::CompatibilityError Encoding:

在Ruby中,与核心库中的类(如object、String、Hash、Numeric等)相比,确定对象是否属于用户定义的、gem定义的或标准库定义的类的最佳方法是什么?

预定义列表 快照类 下面是我在解释器中拍摄到的对象列表:

ARGF.class
ArgumentError
Array
BasicObject
Bignum
Binding
Class
Complex
Data
Dir
EOFError
Encoding
Encoding::CompatibilityError
Encoding::Converter
Encoding::ConverterNotFoundError
Encoding::InvalidByteSequenceError
Encoding::UndefinedConversionError
EncodingError
Enumerator
Enumerator::Generator
Enumerator::Yielder
Errno::E2BIG
Errno::EACCES
Errno::EADDRINUSE
Errno::EADDRNOTAVAIL
Errno::EAFNOSUPPORT
Errno::EAGAIN
Errno::EALREADY
Errno::EBADF
Errno::EBUSY
Errno::ECHILD
Errno::ECONNABORTED
Errno::ECONNREFUSED
Errno::ECONNRESET
Errno::EDEADLK
Errno::EDESTADDRREQ
Errno::EDOM
Errno::EDQUOT
Errno::EEXIST
Errno::EFAULT
Errno::EFBIG
Errno::EHOSTDOWN
Errno::EHOSTUNREACH
Errno::EILSEQ
Errno::EINPROGRESS
Errno::EINTR
Errno::EINVAL
Errno::EIO
Errno::EISCONN
Errno::EISDIR
Errno::ELOOP
Errno::EMFILE
Errno::EMLINK
Errno::EMSGSIZE
Errno::ENAMETOOLONG
Errno::ENETDOWN
Errno::ENETRESET
Errno::ENETUNREACH
Errno::ENFILE
Errno::ENOBUFS
Errno::ENODEV
Errno::ENOENT
Errno::ENOEXEC
Errno::ENOLCK
Errno::ENOMEM
Errno::ENOPROTOOPT
Errno::ENOSPC
Errno::ENOSYS
Errno::ENOTCONN
Errno::ENOTDIR
Errno::ENOTEMPTY
Errno::ENOTSOCK
Errno::ENOTTY
Errno::ENXIO
Errno::EOPNOTSUPP
Errno::EPERM
Errno::EPFNOSUPPORT
Errno::EPIPE
Errno::EPROCLIM
Errno::EPROTONOSUPPORT
Errno::EPROTOTYPE
Errno::ERANGE
Errno::EREMOTE
Errno::EROFS
Errno::ESHUTDOWN
Errno::ESOCKTNOSUPPORT
Errno::ESPIPE
Errno::ESRCH
Errno::ESTALE
Errno::ETIMEDOUT
Errno::ETOOMANYREFS
Errno::EUSERS
Errno::EWOULDBLOCK
Errno::EXDEV
Errno::NOERROR
Exception
FalseClass
Fiber
FiberError
File
File::Stat
Fixnum
Float
FloatDomainError
Gem::CommandLineError
Gem::DependencyError
Gem::DependencyRemovalException
Gem::DocumentError
Gem::EndOfYAMLException
Gem::Exception
Gem::FilePermissionError
Gem::FormatException
Gem::GemNotFoundException
Gem::GemNotInHomeException
Gem::InstallError
Gem::InvalidSpecificationException
Gem::LoadError
Gem::OperationNotSupportedError
Gem::RemoteError
Gem::RemoteInstallationCancelled
Gem::RemoteInstallationSkipped
Gem::RemoteSourceException
Gem::SystemExitException
Gem::VerificationError
Hash
IO
IOError
IndexError
Integer
Interrupt
KeyError
LoadError
LocalJumpError
MatchData
Math::DomainError
Method
Module
Mutex
NameError
NameError::message
NilClass
NoMemoryError
NoMethodError
NotImplementedError
Numeric
Object
Proc
Process::Status
Random
Range
RangeError
Rational
Regexp
RegexpError
RubyVM
RubyVM::Env
RubyVM::InstructionSequence
RuntimeError
ScriptError
SecurityError
SignalException
StandardError
StopIteration
String
Struct
Struct::Tms
Symbol
SyntaxError
SystemCallError
SystemExit
SystemStackError
Thread
ThreadError
ThreadGroup
Time
TrueClass
TypeError
UnboundMethod
ZeroDivisionError

你个人如何区分“本地”类型?这些都是Ruby中的对象。根据您的定义,标准库中的对象是“本机”对象吗?是的,这就是我的意思。“未定义用户或gem”,即由标准库定义。等等,您是指中的类还是中的类?(默认情况下,前者加载到解释器中;后者包含在Ruby发行版中,但必须是
require
d(动态加载到运行时中)要使用。另外,你可能想描述一下你实际上想要实现的目标。核心是我一直在寻找的一个词——感谢你澄清这一点。不过,与这个问题的简单性相比,我试图实现的目标有点冗长。我怀疑这是否必要。
# Before the user can load their own classes, find all existing classes
BUILTINS = ObjectSpace.each_object.select{ |o| o.class==Class }

do_something if BUILTINS.include?( my_object.class )
ARGF.class
ArgumentError
Array
BasicObject
Bignum
Binding
Class
Complex
Data
Dir
EOFError
Encoding
Encoding::CompatibilityError
Encoding::Converter
Encoding::ConverterNotFoundError
Encoding::InvalidByteSequenceError
Encoding::UndefinedConversionError
EncodingError
Enumerator
Enumerator::Generator
Enumerator::Yielder
Errno::E2BIG
Errno::EACCES
Errno::EADDRINUSE
Errno::EADDRNOTAVAIL
Errno::EAFNOSUPPORT
Errno::EAGAIN
Errno::EALREADY
Errno::EBADF
Errno::EBUSY
Errno::ECHILD
Errno::ECONNABORTED
Errno::ECONNREFUSED
Errno::ECONNRESET
Errno::EDEADLK
Errno::EDESTADDRREQ
Errno::EDOM
Errno::EDQUOT
Errno::EEXIST
Errno::EFAULT
Errno::EFBIG
Errno::EHOSTDOWN
Errno::EHOSTUNREACH
Errno::EILSEQ
Errno::EINPROGRESS
Errno::EINTR
Errno::EINVAL
Errno::EIO
Errno::EISCONN
Errno::EISDIR
Errno::ELOOP
Errno::EMFILE
Errno::EMLINK
Errno::EMSGSIZE
Errno::ENAMETOOLONG
Errno::ENETDOWN
Errno::ENETRESET
Errno::ENETUNREACH
Errno::ENFILE
Errno::ENOBUFS
Errno::ENODEV
Errno::ENOENT
Errno::ENOEXEC
Errno::ENOLCK
Errno::ENOMEM
Errno::ENOPROTOOPT
Errno::ENOSPC
Errno::ENOSYS
Errno::ENOTCONN
Errno::ENOTDIR
Errno::ENOTEMPTY
Errno::ENOTSOCK
Errno::ENOTTY
Errno::ENXIO
Errno::EOPNOTSUPP
Errno::EPERM
Errno::EPFNOSUPPORT
Errno::EPIPE
Errno::EPROCLIM
Errno::EPROTONOSUPPORT
Errno::EPROTOTYPE
Errno::ERANGE
Errno::EREMOTE
Errno::EROFS
Errno::ESHUTDOWN
Errno::ESOCKTNOSUPPORT
Errno::ESPIPE
Errno::ESRCH
Errno::ESTALE
Errno::ETIMEDOUT
Errno::ETOOMANYREFS
Errno::EUSERS
Errno::EWOULDBLOCK
Errno::EXDEV
Errno::NOERROR
Exception
FalseClass
Fiber
FiberError
File
File::Stat
Fixnum
Float
FloatDomainError
Gem::CommandLineError
Gem::DependencyError
Gem::DependencyRemovalException
Gem::DocumentError
Gem::EndOfYAMLException
Gem::Exception
Gem::FilePermissionError
Gem::FormatException
Gem::GemNotFoundException
Gem::GemNotInHomeException
Gem::InstallError
Gem::InvalidSpecificationException
Gem::LoadError
Gem::OperationNotSupportedError
Gem::RemoteError
Gem::RemoteInstallationCancelled
Gem::RemoteInstallationSkipped
Gem::RemoteSourceException
Gem::SystemExitException
Gem::VerificationError
Hash
IO
IOError
IndexError
Integer
Interrupt
KeyError
LoadError
LocalJumpError
MatchData
Math::DomainError
Method
Module
Mutex
NameError
NameError::message
NilClass
NoMemoryError
NoMethodError
NotImplementedError
Numeric
Object
Proc
Process::Status
Random
Range
RangeError
Rational
Regexp
RegexpError
RubyVM
RubyVM::Env
RubyVM::InstructionSequence
RuntimeError
ScriptError
SecurityError
SignalException
StandardError
StopIteration
String
Struct
Struct::Tms
Symbol
SyntaxError
SystemCallError
SystemExit
SystemStackError
Thread
ThreadError
ThreadGroup
Time
TrueClass
TypeError
UnboundMethod
ZeroDivisionError