首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >TypeError:超类与Ruby中的class Word不匹配

TypeError:超类与Ruby中的class Word不匹配
EN

Stack Overflow用户
提问于 2012-03-22 07:22:09
回答 4查看 34K关注 0票数 27

我正在创建一个Word类,但收到一个错误:

TypeError:类Word的超类不匹配

下面是irb代码:

代码语言:javascript
复制
irb(main):016:0> class Word
irb(main):017:1>  def palindrome?(string)
irb(main):018:2>   string == string.reverse
irb(main):019:2>  end
irb(main):020:1> end
=> nil
irb(main):021:0> w = Word.new
=> #<Word:0x4a8d970>
irb(main):022:0> w.palindrome?("foobar")
=> false
irb(main):023:0> w.palindrome?("level")
=> true
irb(main):024:0> class Word < String
irb(main):025:1>  def palindrome?
irb(main):026:2>    self == self.reverse
irb(main):027:2>  end
irb(main):028:1> end
TypeError: superclass mismatch for class Word
 from (irb):24
 from C:/Ruby193/lib/ruby/gems/1.9.1/gems/railties-3.2.1/lib/rails/commands/console.rb:47:in `start'
 from C:/Ruby193/lib/ruby/gems/1.9.1/gems/railties-3.2.1/lib/rails/commands/console.rb:8:in `start'
 from C:/Ruby193/lib/ruby/gems/1.9.1/gems/railties-3.2.1/lib/rails/commands.rb:41:in `<top (required)>'
 from script/rails:6:in `require'
 from script/rails:6:in `<main>'
EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2012-03-22 07:30:14

irb rails console**)**或 irb 的经验法则(或irb

如果要使用继承(超类)创建同一个类两次,请退出irb实例并重新创建它。为什么是这个?因为否则会发生类冲突。

在您的例子中,您使用的是Windows (从问题中找到),所以只需在DOS提示符下输入exit,然后再次输入irbrails console并创建您的Word类,它就应该可以工作了。如果对你不起作用,请告诉我。

票数 43
EN

Stack Overflow用户

发布于 2012-03-22 07:44:03

出现超类不匹配错误的原因是您已经将Word类定义为从Object继承

代码语言:javascript
复制
class Word
...
end

在Ruby中(就像在大多数动态语言中一样),您可以通过重新打开定义并修改类来monkey-patch类。但是,在您的实例中,当您重新打开类时,您也在尝试将该类重新定义为从超类String继承。

代码语言:javascript
复制
class Word < String
...
end

一旦定义了类及其继承结构,就不能再定义它了。

正如一些人所说,退出并重新启动irb将允许您从头开始定义Word类。

票数 21
EN

Stack Overflow用户

发布于 2013-11-08 09:56:38

link664已经清楚地解释了这个问题。

然而,有一个更简单的修复方法,不用退出irb (并丢掉所有其他工作)。您可以通过这种方式删除现有的类定义。

代码语言:javascript
复制
irb(main):051:0> Object.send(:remove_const, :Word)

您可以使用以下命令进行验证:

代码语言:javascript
复制
irb(main):052:0> Word.public_instance_methods

它应该返回:

代码语言:javascript
复制
NameError: uninitialized constant Word
from (irb):52
票数 17
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9814282

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档