【问题标题】:superclass mismatch: get class object (ruby)超类不匹配:获取类对象(ruby)
【发布时间】:2013-05-22 11:43:18
【问题描述】:
class A
end
class B
end
class Y < A
end
class Y < B # TypeError: superclass mismatch for Y
end

有没有办法让类引发超类不匹配? 我想知道是 Y 类导致它并将该类保存在我的裸变量中。

【问题讨论】:

  • 您是否使用脚本来生成这些类?你能发布它的相关部分吗?
  • 这些类可以在动态加载的文件中找到,并且可能会随着时间而改变。因此,如果源发生更改,可能会发生超类不匹配。

标签: ruby exception superclass


【解决方案1】:
class A;end
class B;end
class Y < A;end
x = (class Y < B;end) rescue $!
p x.to_s #=> "superclass mismatch for class Y"

现在从这个字符串"superclass mismatch for class Y",你可以得到这个类:

Object.module_eval(x.to_s[/class (?<name>\S*)$/, 'name'], __FILE__, __LINE__)
#=> Y

(取自this SO answer

【讨论】:

  • 继续@Priti 的回答,您可以通过Object.module_eval(x.to_s[/class (?&lt;name&gt;\S*)$/, 'name'], __FILE__, __LINE__) 获得课程
  • @tessi 请根据我的回答对其进行编辑。我对Regex 不强,因此将其保留为空白。 :)
  • @User 没问题.. 如果你放置得当,你会得到结果:)
  • 我正在使用 maglev 并且命名的正则表达式组不起作用。这是我的代码:github.com/knub/maglevrecord/blob/niccokunzmann/migration/lib/… 请注意,它不适用于嵌套类.. 但这对我来说没有问题 :)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-12-29
  • 2022-11-03
  • 1970-01-01
  • 1970-01-01
  • 2022-01-18
相关资源
最近更新 更多