2

在 Ruby 中,确定对象是否属于用户定义、gem 定义或标准库定义的类的最佳方法是什么,而不是核心库中的类(例如 Object、String、Hash、Numeric , ETC。)?

4

1 回答 1

6

预定义列表

# Put your own list of classes here...
NATIVES = [ Object, String, Hash, Numeric ]

do_something if NATIVES.include?( my_object.class )

快照类

# 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
于 2012-07-27T16:41:38.537 回答