如错误消息所示,在代码中某处使用与先前定义或打开Cookie类中使用的不同超类时,会打开Cookie类。
即使没有显式指定超仍然是一个类定义有一个超:
class Cookie
end
这定义了对象的超Cookie类。
我以前遇到过这个错误,当你有一些代码试图在没有指定超类的情况下重新打开一个类时,它会发生,程序员的假设是已经定义了类(在这种情况下,Cookie) ,并且他只是重新打开它来添加一些功能。但是如果重新打开和定义的顺序相反,你会得到这个错误,因为这个类已经被定义为Object的一个子类,但是正试图用不同的超类重新定义或重新打开。在IRB试试这个:
% irb
irb(main):001:0> class C < String; end
=> nil
irb(main):002:0> class C; end
=> nil
irb(main):003:0> exit
% irb
irb(main):001:0> class C; end
=> nil
irb(main):002:0> class C < String; end
TypeError: superclass mismatch for class C
from (irb):2
所以,你可能只需要到grep为Cookie类的定义和尝试,以确保文件总是被要求-d正确的顺序。这可能也可能不容易。 :)