跳至内容 跳至搜索

Active Support 后代跟踪器

此模块提供了一个内部实现来跟踪后代,它比遍历 ObjectSpace 更快。

但是 Ruby 3.1 提供了一个快速原生的 +Class#subclasses+ 方法,因此如果您知道您的代码不会在旧的 Ruby 版本上执行,包括 ActiveSupport::DescendantsTracker 不会带来任何好处。

方法
D
S

类公共方法

descendants(klass)

# File activesupport/lib/active_support/descendants_tracker.rb, line 102
def descendants(klass)
  klass.descendants
end

subclasses(klass)

# File activesupport/lib/active_support/descendants_tracker.rb, line 98
def subclasses(klass)
  klass.subclasses
end

实例公共方法

descendants()

# File activesupport/lib/active_support/descendants_tracker.rb, line 107
def descendants
  subclasses = DescendantsTracker.reject!(self.subclasses)
  subclasses.concat(subclasses.flat_map(&:descendants))
end