Ruby中类的超类不匹配

时间:2018-03-06 07:59:34

标签: ruby

我正在处理需要不同类的项目,如下所示:

LIB / command.rb

class Command
end

LIB /命令/ group.rb

class Command
  class Group < Command
  end
end

LIB /命令/组/ add.rb

class Command
  class Group
    class Add < Group
      # do something
    end
  end
end

和lib / group.rb

class Group
  # do something
end

Rake文件

task :reload do
  Dir[File.dirname(__FILE__) + '/lib/**/*.rb'].each{ |file| load file }
end

task default: 'reload'

前三个类的行为类似于助手,最后一个类是模型。

当我运行Rakefile来加载所有类时,它确实会提升TypeError: superclass mismatch for class Group

如果不重命名其中一个Group类,我应该如何解决?有可能吗?

2 个答案:

答案 0 :(得分:2)

lib/command/group/add.rb可能会在lib/command/group.rb之前加载。因此,在后者中,似乎您尝试更改哪个类Group继承自。

乐队援助解决方案将指向所有文件中的相同子类。在lib/command/group/add.rb中的Aka,您应该添加< Command

真正的解决方案应该是永远不要使用类/模块进行命名空间并为其附加功能。

此问题在Euruko 2016中提出,Matz表示他们可能会考虑使用特殊关键字。 [引证需要]

答案 1 :(得分:1)

感谢您提供更多代码。现在很清楚,这里有一个错误。您定义Command::Group两次,但只有一个继承自Command

LIB /命令/ group.rb

class Command
  class Group < Command
  end
end

LIB /命令/组/ add.rb

class Command
  class Group # missing inheritance
    class Add < Group
      # do something
    end
  end
end