gpt4 book ai didi

ruby-on-rails - 覆盖 Ruby 的飞船操作符 <=>

转载 作者:数据小太阳 更新时间:2023-10-29 07:24:18 26 4
gpt4 key购买 nike

我正在尝试重写 Ruby 的 <=>(宇宙飞船)运算符来对苹果和橙子进行排序,以便首先按重量对苹果进行排序,然后对橙子进行甜度排序。像这样:

module Fruity
attr_accessor :weight, :sweetness

def <=>(other)
# use Array#<=> to compare the attributes
[self.weight, self.sweetness] <=> [other.weight, other.sweetness]
end
include Comparable
end

class Apple
include Fruity

def initialize(w)
self.weight = w
end

end

class Orange
include Fruity

def initialize(s)
self.sweetness = s
end

end

fruits = [Apple.new(2),Orange.new(4),Apple.new(6),Orange.new(9),Apple.new(1),Orange.new(22)]

p fruits

#should work?
p fruits.sort

但这不起作用,有人可以告诉我这里做错了什么,或者更好的方法吗?

最佳答案

你的问题是你只初始化了两侧的一个属性,另一个仍然是 nil . nil未在 Array#<=> 中处理方法,最终会导致排序失败。

首先有几种方法可以解决这个问题

[self.weight.to_i, self.sweetness.to_i] <=> [other.weight.to_i, other.sweetness.to_i]

nil.to_i给你0 ,这将使这项工作。

关于ruby-on-rails - 覆盖 Ruby 的飞船操作符 <=>,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3058801/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com