告诉祖先是Ruby中的Class还是Module的方法?
发布时间:2020-12-16 19:46:38 所属栏目:百科 来源:网络整理
导读:如果我有一个像下面这样的类,那我怎么知道一个祖先是一个类,一个模块呢? ActiveRecord::Base.send(:include,SomeLibrary)class Group ActiveRecord::Base include SomeLibrary::Coreendclass SubGroup Groupendancestor_names = SubGroup.ancestors.map(:na
如果我有一个像下面这样的类,那我怎么知道一个祖先是一个类,一个模块呢?
ActiveRecord::Base.send(:include,SomeLibrary) class Group < ActiveRecord::Base include SomeLibrary::Core end class SubGroup < Group end ancestor_names = SubGroup.ancestors.map(&:name) puts ancestor_names.inspect #=> [ "SubGroup","SomeLibrary::Core::InstanceMethods","SomeLibrary::Core","Group","ActiveRecord::Base","SomeLibrary","ActiveRecord::Aggregations","ActiveRecord::Transactions","ActiveRecord::Reflection","ActiveRecord::Batches","ActiveRecord::Calculations","ActiveRecord::Serialization","ActiveRecord::AutosaveAssociation","ActiveRecord::NestedAttributes","ActiveRecord::Associations","ActiveRecord::AssociationPreload","ActiveRecord::NamedScope","ActiveRecord::Callbacks","ActiveRecord::Observing","ActiveRecord::Timestamp","ActiveRecord::Dirty","ActiveRecord::AttributeMethods","ActiveRecord::Locking::Optimistic","ActiveRecord::Locking::Pessimistic","ActiveSupport::Callbacks","ActiveRecord::Validations","Object","Mocha::ObjectMethods","JSON::Pure::Generator::GeneratorMethods::Object","ActiveSupport::Dependencies::Loadable","Base64::Deprecated","Base64","PP::ObjectMixin","Kernel" ] 我想要做这样的事情: ancestor_names.each do |name| if class?(name) puts "#{name} is a Class" elsif module?(name) puts "#{name} is a Module" end end 要么… SubGroup.ancestor_classes #=> only the classes in the tree SubGroup.ancestor_modules #=> only the modules in the tree 它归结为,你如何检查一个对象是一个类还是一个模块? 解决方法
那么这就是
included_modules 的,所以你可能正在寻找的是:
SubGroup.included_modules #=> module ancestors SubGroup.ancestors - SubGroup.included_modules #=> class ancestors 或者,使用辅助方法: class Class def ancestor_classes ancestors - included_modules end end SubGroup.included_modules #=> module ancestors SubGroup.ancestor_classes #=> class ancestors (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |