Back to Blog

Ruby 3.1 adds Class#subclasses

on December 27, 2021
This blog is part of our Ruby 3.1 series.

Ruby 3.1 introduces the Class#subclasses method which returns all classes directly inheriting from the receiver without including singleton classes.

We can see many implementations for calculating all subclasses of a particular class from the Ruby community with different gems. The ActiveSupport::DescendantsTracker is one of such implementations used in Rails framework. Finally, Ruby has added the Class#subclasses native implementation for it's 3.1 version release.

After Ruby 3.1

1=> class User; end
2=> class Employee < User; end
3=> class Client < User; end
4
5=> class Manager < Employee; end
6=> class Developer < Employee; end
7
8=> User.subclasses
9=> [Employee, Client]
10
11=> Employee.subclasses
12=> [Manager, Developer]
13
14=> Developer.subclasses
15=> []

Here's the relevant pull request and feature discussion for this change.


You might also like

If you liked this blog post, check out similar ones from BigBinary