如何使用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)之间
这是我到目前为止所拥有的。我试图编写代码来比较歌曲名称的长度 修复compare原语,使其与另一个的like属性进行比较:如何使用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
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