【发布时间】:2023-04-06 09:14:01
【问题描述】:
我操作一个符号数组,其中一些可能是 Ruby 类名(例如 :Fixnum)。
如何选择它们?
当然,我事先并不知道这些符号的完整列表…… 当然,我在 Ruby 中这样做。
【问题讨论】:
标签: ruby reflection introspection
我操作一个符号数组,其中一些可能是 Ruby 类名(例如 :Fixnum)。
如何选择它们?
当然,我事先并不知道这些符号的完整列表…… 当然,我在 Ruby 中这样做。
【问题讨论】:
标签: ruby reflection introspection
如果您检查是否先定义了 const,则可以使用 const_get 进行检查:
[:Integer, :Dog, :Fixnum, :String, :Rat].select{ |x| Object.const_defined?(x) && Object.const_get(x).class === Class }
=> [:Integer, :Fixnum, :String]
【讨论】:
我讨厌使用eval 但是....
[:Integer, :Dog, :Fixnum, :String, :Rat].select{|x| defined? x.to_s && Class === eval(x.to_s)}
我尝试了Kernel.const_get,但无法让它发挥作用。
【讨论】:
ObjectSpace.each_object(Class).map(&:name).map(&:to_sym) & [:Integer, :Dog, :Fixnum, :String, :Rat]
=> [:Fixnum, :Integer, :String]
【讨论】: