我正在尝试找到一种方法来获取模块和类名,以便为我提供有关各个常量的更多信息。在我可以枚举像常量这样的东西的情况下,我想要对它们进行处理并稍微评估它们。我以前见过这样的东西但是不记得在哪里。 Errno模块只是一个例子。
Errno.constants.sort.each do |name|
symbol = "#{Errno}::#{name}::#{Errno}".to_sym
p eval("#{symbol}")
end
puts Errno::E2BIG::Errno
虽然有效,但我更喜欢答案。
这就像我开始玩模块一样。
puts "Comparable.class = #{Comparable.class}"
# now find out what classes and modules include Comparable.
Object.constants.sort.each do |name|
test = Object.const_get(name).class
if test == Class || test == Module
if Object.const_get(name).include?(Comparable)
puts "#{Object.const_get(name)}"
end
end
end
但标准库中还有更多内容,所以我需要它们。 这只是为我的参考库制作我自己的一些可运行的代码。
类似的事情:
Comparable.public_instance_methods(false).sort.each do |name|
puts "Comparable.public_instance_methods = #{name}"
end
这是我正在查看的类或模块的每个文件。我使用目录结构为hi·er·ar·chy。只有模块和类是分开的。
答案 0 :(得分:3)
然后这样: -
在我的 Window-XP 计算机中:
Errno.constants.sort.each do |name|
puts "Errno::#{name}::Errno => #{Errno.const_get(name).const_get(:Errno)}"
end
的输出:强> 的
Errno::E2BIG::Errno => 7
Errno::EACCES::Errno => 13
Errno::EADDRINUSE::Errno => 10048
Errno::EADDRNOTAVAIL::Errno => 10049
Errno::EADV::Errno => 0
Errno::EAFNOSUPPORT::Errno => 10047
Errno::EAGAIN::Errno => 11
Errno::EALREADY::Errno => 10037
Errno::EAUTH::Errno => 0
Errno::EBADE::Errno => 0
Errno::EBADF::Errno => 9
Errno::EBADFD::Errno => 0
Errno::EBADMSG::Errno => 0
Errno::EBADR::Errno => 0
Errno::EBADRPC::Errno => 0
Errno::EBADRQC::Errno => 0
Errno::EBADSLT::Errno => 0
Errno::EBFONT::Errno => 0
Errno::EBUSY::Errno => 16
Errno::ECANCELED::Errno => 0
Errno::ECHILD::Errno => 10
Errno::ECHRNG::Errno => 0
Errno::ECOMM::Errno => 0
Errno::ECONNABORTED::Errno => 10053
Errno::ECONNREFUSED::Errno => 10061
Errno::ECONNRESET::Errno => 10054
Errno::EDEADLK::Errno => 36
Errno::EDEADLOCK::Errno => 36
Errno::EDESTADDRREQ::Errno => 10039
Errno::EDOM::Errno => 33
Errno::EDOOFUS::Errno => 0
Errno::EDOTDOT::Errno => 0
Errno::EDQUOT::Errno => 10069
Errno::EEXIST::Errno => 17
Errno::EFAULT::Errno => 14
Errno::EFBIG::Errno => 27
Errno::EFTYPE::Errno => 0
Errno::EHOSTDOWN::Errno => 10064
Errno::EHOSTUNREACH::Errno => 10065
Errno::EIDRM::Errno => 0
Errno::EILSEQ::Errno => 42
Errno::EINPROGRESS::Errno => 10036
Errno::EINTR::Errno => 4
Errno::EINVAL::Errno => 22
Errno::EIO::Errno => 5
Errno::EIPSEC::Errno => 0
Errno::EISCONN::Errno => 10056
Errno::EISDIR::Errno => 21
Errno::EISNAM::Errno => 0
Errno::EKEYEXPIRED::Errno => 0
Errno::EKEYREJECTED::Errno => 0
Errno::EKEYREVOKED::Errno => 0
Errno::EL2HLT::Errno => 0
Errno::EL2NSYNC::Errno => 0
Errno::EL3HLT::Errno => 0
Errno::EL3RST::Errno => 0
Errno::ELIBACC::Errno => 0
Errno::ELIBBAD::Errno => 0
Errno::ELIBEXEC::Errno => 0
Errno::ELIBMAX::Errno => 0
Errno::ELIBSCN::Errno => 0
Errno::ELNRNG::Errno => 0
Errno::ELOOP::Errno => 10062
Errno::EMEDIUMTYPE::Errno => 0
Errno::EMFILE::Errno => 24
Errno::EMLINK::Errno => 31
Errno::EMSGSIZE::Errno => 10040
Errno::EMULTIHOP::Errno => 0
Errno::ENAMETOOLONG::Errno => 38
Errno::ENAVAIL::Errno => 0
Errno::ENEEDAUTH::Errno => 0
Errno::ENETDOWN::Errno => 10050
Errno::ENETRESET::Errno => 10052
Errno::ENETUNREACH::Errno => 10051
Errno::ENFILE::Errno => 23
Errno::ENOANO::Errno => 0
Errno::ENOATTR::Errno => 0
Errno::ENOBUFS::Errno => 10055
Errno::ENOCSI::Errno => 0
Errno::ENODATA::Errno => 0
Errno::ENODEV::Errno => 19
Errno::ENOENT::Errno => 2
Errno::ENOEXEC::Errno => 8
Errno::ENOKEY::Errno => 0
Errno::ENOLCK::Errno => 39
Errno::ENOLINK::Errno => 0
Errno::ENOMEDIUM::Errno => 0
Errno::ENOMEM::Errno => 12
Errno::ENOMSG::Errno => 0
Errno::ENONET::Errno => 0
Errno::ENOPKG::Errno => 0
Errno::ENOPROTOOPT::Errno => 10042
Errno::ENOSPC::Errno => 28
Errno::ENOSR::Errno => 0
Errno::ENOSTR::Errno => 0
Errno::ENOSYS::Errno => 40
Errno::ENOTBLK::Errno => 0
Errno::ENOTCONN::Errno => 10057
Errno::ENOTDIR::Errno => 20
Errno::ENOTEMPTY::Errno => 41
Errno::ENOTNAM::Errno => 0
Errno::ENOTRECOVERABLE::Errno => 0
Errno::ENOTSOCK::Errno => 10038
Errno::ENOTSUP::Errno => 0
Errno::ENOTTY::Errno => 25
Errno::ENOTUNIQ::Errno => 0
Errno::ENXIO::Errno => 6
Errno::EOPNOTSUPP::Errno => 10045
Errno::EOVERFLOW::Errno => 0
Errno::EOWNERDEAD::Errno => 0
Errno::EPERM::Errno => 1
Errno::EPFNOSUPPORT::Errno => 10046
Errno::EPIPE::Errno => 32
Errno::EPROCLIM::Errno => 10067
Errno::EPROCUNAVAIL::Errno => 0
Errno::EPROGMISMATCH::Errno => 0
Errno::EPROGUNAVAIL::Errno => 0
Errno::EPROTO::Errno => 0
Errno::EPROTONOSUPPORT::Errno => 10043
Errno::EPROTOTYPE::Errno => 10041
Errno::ERANGE::Errno => 34
Errno::EREMCHG::Errno => 0
Errno::EREMOTE::Errno => 10071
Errno::EREMOTEIO::Errno => 0
Errno::ERESTART::Errno => 0
Errno::ERFKILL::Errno => 0
Errno::EROFS::Errno => 30
Errno::ERPCMISMATCH::Errno => 0
Errno::ESHUTDOWN::Errno => 10058
Errno::ESOCKTNOSUPPORT::Errno => 10044
Errno::ESPIPE::Errno => 29
Errno::ESRCH::Errno => 3
Errno::ESRMNT::Errno => 0
Errno::ESTALE::Errno => 10070
Errno::ESTRPIPE::Errno => 0
Errno::ETIME::Errno => 0
Errno::ETIMEDOUT::Errno => 10060
Errno::ETOOMANYREFS::Errno => 10059
Errno::ETXTBSY::Errno => 0
Errno::EUCLEAN::Errno => 0
Errno::EUNATCH::Errno => 0
Errno::EUSERS::Errno => 10068
Errno::EWOULDBLOCK::Errno => 10035
Errno::EXDEV::Errno => 18
Errno::EXFULL::Errno => 0
Errno::NOERROR::Errno => 0
在我的 Ubuntu 13.04 中,输出如下所示:
require 'awesome_print'
h = Errno.constants.sort.each_with_object({}) do |name,h|
h["Errno::#{name}::Errno"] = Errno.const_get(name).const_get(:Errno)
end
ap h
的输出:强> 的
{
"Errno::E2BIG::Errno" => 7,
"Errno::EACCES::Errno" => 13,
"Errno::EADDRINUSE::Errno" => 98,
"Errno::EADDRNOTAVAIL::Errno" => 99,
"Errno::EADV::Errno" => 68,
"Errno::EAFNOSUPPORT::Errno" => 97,
"Errno::EAGAIN::Errno" => 11,
"Errno::EALREADY::Errno" => 114,
"Errno::EAUTH::Errno" => 0,
"Errno::EBADE::Errno" => 52,
"Errno::EBADF::Errno" => 9,
"Errno::EBADFD::Errno" => 77,
"Errno::EBADMSG::Errno" => 74,
"Errno::EBADR::Errno" => 53,
"Errno::EBADRPC::Errno" => 0,
"Errno::EBADRQC::Errno" => 56,
"Errno::EBADSLT::Errno" => 57,
"Errno::EBFONT::Errno" => 59,
"Errno::EBUSY::Errno" => 16,
"Errno::ECANCELED::Errno" => 125,
"Errno::ECHILD::Errno" => 10,
"Errno::ECHRNG::Errno" => 44,
"Errno::ECOMM::Errno" => 70,
"Errno::ECONNABORTED::Errno" => 103,
"Errno::ECONNREFUSED::Errno" => 111,
"Errno::ECONNRESET::Errno" => 104,
"Errno::EDEADLK::Errno" => 35,
"Errno::EDEADLOCK::Errno" => 35,
"Errno::EDESTADDRREQ::Errno" => 89,
"Errno::EDOM::Errno" => 33,
"Errno::EDOOFUS::Errno" => 0,
"Errno::EDOTDOT::Errno" => 73,
"Errno::EDQUOT::Errno" => 122,
"Errno::EEXIST::Errno" => 17,
"Errno::EFAULT::Errno" => 14,
"Errno::EFBIG::Errno" => 27,
"Errno::EFTYPE::Errno" => 0,
"Errno::EHOSTDOWN::Errno" => 112,
"Errno::EHOSTUNREACH::Errno" => 113,
"Errno::EIDRM::Errno" => 43,
"Errno::EILSEQ::Errno" => 84,
"Errno::EINPROGRESS::Errno" => 115,
"Errno::EINTR::Errno" => 4,
"Errno::EINVAL::Errno" => 22,
"Errno::EIO::Errno" => 5,
"Errno::EIPSEC::Errno" => 0,
"Errno::EISCONN::Errno" => 106,
"Errno::EISDIR::Errno" => 21,
"Errno::EISNAM::Errno" => 120,
"Errno::EKEYEXPIRED::Errno" => 127,
"Errno::EKEYREJECTED::Errno" => 129,
"Errno::EKEYREVOKED::Errno" => 128,
"Errno::EL2HLT::Errno" => 51,
"Errno::EL2NSYNC::Errno" => 45,
"Errno::EL3HLT::Errno" => 46,
"Errno::EL3RST::Errno" => 47,
"Errno::ELIBACC::Errno" => 79,
"Errno::ELIBBAD::Errno" => 80,
"Errno::ELIBEXEC::Errno" => 83,
"Errno::ELIBMAX::Errno" => 82,
"Errno::ELIBSCN::Errno" => 81,
"Errno::ELNRNG::Errno" => 48,
"Errno::ELOOP::Errno" => 40,
"Errno::EMEDIUMTYPE::Errno" => 124,
"Errno::EMFILE::Errno" => 24,
"Errno::EMLINK::Errno" => 31,
"Errno::EMSGSIZE::Errno" => 90,
"Errno::EMULTIHOP::Errno" => 72,
"Errno::ENAMETOOLONG::Errno" => 36,
"Errno::ENAVAIL::Errno" => 119,
"Errno::ENEEDAUTH::Errno" => 0,
"Errno::ENETDOWN::Errno" => 100,
"Errno::ENETRESET::Errno" => 102,
"Errno::ENETUNREACH::Errno" => 101,
"Errno::ENFILE::Errno" => 23,
"Errno::ENOANO::Errno" => 55,
"Errno::ENOATTR::Errno" => 0,
"Errno::ENOBUFS::Errno" => 105,
"Errno::ENOCSI::Errno" => 50,
"Errno::ENODATA::Errno" => 61,
"Errno::ENODEV::Errno" => 19,
"Errno::ENOENT::Errno" => 2,
"Errno::ENOEXEC::Errno" => 8,
"Errno::ENOKEY::Errno" => 126,
"Errno::ENOLCK::Errno" => 37,
"Errno::ENOLINK::Errno" => 67,
"Errno::ENOMEDIUM::Errno" => 123,
"Errno::ENOMEM::Errno" => 12,
"Errno::ENOMSG::Errno" => 42,
"Errno::ENONET::Errno" => 64,
"Errno::ENOPKG::Errno" => 65,
"Errno::ENOPROTOOPT::Errno" => 92,
"Errno::ENOSPC::Errno" => 28,
"Errno::ENOSR::Errno" => 63,
"Errno::ENOSTR::Errno" => 60,
"Errno::ENOSYS::Errno" => 38,
"Errno::ENOTBLK::Errno" => 15,
"Errno::ENOTCONN::Errno" => 107,
"Errno::ENOTDIR::Errno" => 20,
"Errno::ENOTEMPTY::Errno" => 39,
"Errno::ENOTNAM::Errno" => 118,
"Errno::ENOTRECOVERABLE::Errno" => 131,
"Errno::ENOTSOCK::Errno" => 88,
"Errno::ENOTSUP::Errno" => 95,
"Errno::ENOTTY::Errno" => 25,
"Errno::ENOTUNIQ::Errno" => 76,
"Errno::ENXIO::Errno" => 6,
"Errno::EOPNOTSUPP::Errno" => 95,
"Errno::EOVERFLOW::Errno" => 75,
"Errno::EOWNERDEAD::Errno" => 130,
"Errno::EPERM::Errno" => 1,
"Errno::EPFNOSUPPORT::Errno" => 96,
"Errno::EPIPE::Errno" => 32,
"Errno::EPROCLIM::Errno" => 0,
"Errno::EPROCUNAVAIL::Errno" => 0,
"Errno::EPROGMISMATCH::Errno" => 0,
"Errno::EPROGUNAVAIL::Errno" => 0,
"Errno::EPROTO::Errno" => 71,
"Errno::EPROTONOSUPPORT::Errno" => 93,
"Errno::EPROTOTYPE::Errno" => 91,
"Errno::ERANGE::Errno" => 34,
"Errno::EREMCHG::Errno" => 78,
"Errno::EREMOTE::Errno" => 66,
"Errno::EREMOTEIO::Errno" => 121,
"Errno::ERESTART::Errno" => 85,
"Errno::ERFKILL::Errno" => 132,
"Errno::EROFS::Errno" => 30,
"Errno::ERPCMISMATCH::Errno" => 0,
"Errno::ESHUTDOWN::Errno" => 108,
"Errno::ESOCKTNOSUPPORT::Errno" => 94,
"Errno::ESPIPE::Errno" => 29,
"Errno::ESRCH::Errno" => 3,
"Errno::ESRMNT::Errno" => 69,
"Errno::ESTALE::Errno" => 116,
"Errno::ESTRPIPE::Errno" => 86,
"Errno::ETIME::Errno" => 62,
"Errno::ETIMEDOUT::Errno" => 110,
"Errno::ETOOMANYREFS::Errno" => 109,
"Errno::ETXTBSY::Errno" => 26,
"Errno::EUCLEAN::Errno" => 117,
"Errno::EUNATCH::Errno" => 49,
"Errno::EUSERS::Errno" => 87,
"Errno::EWOULDBLOCK::Errno" => 11,
"Errno::EXDEV::Errno" => 18,
"Errno::EXFULL::Errno" => 54,
"Errno::NOERROR::Errno" => 0
}