在父类的self中访问匿名类的名称。

鲤鱼

我想在其“超类MySuperclassself.inherited方法中访问一个类的名称它对于由定义的具体类工作正常,class Foo < MySuperclass; end但在使用匿名类时失败。我倾向于避免在测试中创建(类)常量。我希望它可以与匿名类一起使用。

给出以下代码:

class MySuperclass
  def self.inherited(subclass)
    super
    # work with subclass' name
  end
end

klass = Class.new(MySuperclass) do
  def self.name
    'FooBar'
  end
end

klass#name仍将是nilwhenMySuperclass.inherited被调用的时间,就像 Class.new屈服其块并定义其方法之前那样。

我知道一个类在name分配给常量时会得到它,但是有没有办法在Class#name不创建常量的情况下设置“早期”呢?

我准备了一个更详细的代码示例,其中包含失败的测试,以说明期望的结果。

马尔·斯克里列夫

可能是在调用#yield之后发生的::inherited,我看到了与类定义类似的行为。但是,可以通过使用::klass单例方法而不是::inherited回调来避免这种情况

def self.klass
   @klass ||= (self.name || self.to_s).gsub(/Builder\z/, '')
end

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章