如何使用Comparable模块编写比较歌曲长度的Ruby代码? class歌曲 包括可比 属性访问器:歌曲名称 def(其他) @song_name.length其他长度 结束 def初始化(歌曲名称) @song_name=song_name @song_name_length=song_name.length 结束 结束 a=歌曲。新(“全天候摇滚乐”) b=新歌曲(“波希米亚狂想曲”) c=新歌曲(“分钟华尔兹”) 把a=c 放c>a 将a置于?(c,b)之间

如何使用Comparable模块编写比较歌曲长度的Ruby代码? class歌曲 包括可比 属性访问器:歌曲名称 def(其他) @song_name.length其他长度 结束 def初始化(歌曲名称) @song_name=song_name @song_name_length=song_name.length 结束 结束 a=歌曲。新(“全天候摇滚乐”) b=新歌曲(“波希米亚狂想曲”) c=新歌曲(“分钟华尔兹”) 把a=c 放c>a 将a置于?(c,b)之间,ruby,comparable,Ruby,Comparable,这是我到目前为止所拥有的。我试图编写代码来比较歌曲名称的长度 修复compare原语,使其与另一个的like属性进行比较: class Song include Comparable attr_accessor :song_name def <=>(other) @song_name.length <=> other.length end def initialize(song_name) @song_name = song_name

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

修复compare原语,使其与另一个的like属性进行比较:

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)
def(其他)
song_name.length其他。song_name.length
结束

你做错了两件事。在
类歌曲
之后需要一个分号,并且需要将
@Song\u name
的长度与
其他
的长度进行比较,而不是将
其他
本身进行比较。您也不需要
attr\u访问器
。将其更改为
attr\u reader

  def <=>(other)
    song_name.length <=> other.song_name.length
  end
类歌曲;包括可比
属性读取器:歌曲名称
def(其他)
@song_name.length其他。song_name.length
结束
def初始化(歌曲名称)
@song_name=song_name
@song_name_length=song_name.length
结束
结束

如果
include Comparable
位于下一行,则更为惯用。attr\u accessor和attr\u reader之间有什么区别?是否需要在类后加分号?
attr\u accessor
创建setter和getter<代码>属性读取器仅创建getter。如果你想把它们放在同一行上,这是很有必要的,这是在编辑的时候。你试图编写代码来比较字符串长度,而不是歌曲长度。
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