如何使用Comparable模块编写比较歌曲长度的Ruby代码?

时间:2013-02-26 05:59:26

标签: ruby comparable

class Song
  include Comparable
  attr_accessor :song_name
  def <=>(other)
    @song_name.length <=> other.length
  end

  def initialize(song_name)
    @song_name = song_name
    @song_name_length = song_name.length
  end
end

a = Song.new('Rock around the clock')
b = Song.new('Bohemian Rhapsody')
c = Song.new('Minute Waltz')

puts a < b
puts b >= c
puts c > a
puts a.between?(c,b)

这是我到目前为止所拥有的。我正在尝试编写比较歌曲名称长度的代码。

2 个答案:

答案 0 :(得分:2)

修复你的compare原语,然后将它与另一个的like属性进行比较:

  def <=>(other)
    song_name.length <=> other.song_name.length
  end

答案 1 :(得分:0)

你做错了两件事。您需要在class Song之后使用分号,并且需要将@song_name的长度与other的长度进行比较,而不是other本身的长度。您也不需要attr_accessor。将其更改为attr_reader

class Song; include Comparable
  attr_reader :song_name
  def <=>(other)
    @song_name.length <=> other.song_name.length
  end

  def initialize(song_name)
    @song_name = song_name
    @song_name_length = song_name.length
  end
end