TypeError:Ruby中类Word的超类不匹配怎么办?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (10)

我正在创建一个Word类,并且出现错误:

“TypeError: superclass mismatch for class Word”

这是代码:

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>'
提问于
用户回答回答于

irb的拇指规则(无论是irb还是rails console

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

用户回答回答于

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

class Word
...
end

你可以重新定义

class Word < String
...
end

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

扫码关注云+社区