Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Ruby中基于数组中的索引比较项目_Ruby_Arrays_Compare - Fatal编程技术网

在Ruby中基于数组中的索引比较项目

在Ruby中基于数组中的索引比较项目,ruby,arrays,compare,Ruby,Arrays,Compare,我有一张卡类,我想重载操作符与另一张卡进行比较(王牌高于王牌,王牌高于王牌,等等)。我忘记了我对Ruby所知甚少,也不知道从哪里开始 class Card @@RANKS = ['A', 'K', 'Q', 'J', 'T', '9', '8','7','6','5','4','3','2'] attr_reader :rank def initialize(str) @rank = str[0,1] end def > (other) #?????

我有一张
类,我想重载
操作符与另一张卡进行比较(王牌高于王牌,王牌高于王牌,等等)。我忘记了我对Ruby所知甚少,也不知道从哪里开始

class Card
  @@RANKS = ['A', 'K', 'Q', 'J', 'T', '9', '8','7','6','5','4','3','2']
  attr_reader :rank

  def initialize(str)
    @rank = str[0,1]
  end

  def > (other)
    #?????
  end
end
你可以使用这个方法。以下代码检查两张卡的索引,如果
其他
卡出现在当前卡之后,则返回
true

class Card
  @@RANKS = ['A', 'K', 'Q', 'J', 'T', '9', '8','7','6','5','4','3','2']
  attr_reader :rank

  def initialize(str)
    @rank = str[0,1]
  end

  def > (other)
    @@RANKS.index(other.rank) > @@RANKS.index(@rank)
  end
end

ace = Card.new 'A'
king = Card.new 'K'
nine = Card.new '9'

puts ace > king
puts ace > nine
puts nine > king

如果定义spaceship操作符而不是大于,您可能会更高兴。()

例如,排序取决于它的定义


我同意达林的看法

所有你需要做的是包括比较和定义,然后你将能够做所有其他的比较免费!这比单独定义“>”灵活得多

用鹤嘴锄书上的话来说: Comparable mixin可用于向类添加比较运算符(),以及?之间的方法。为此,Comparable假设使用它的任何类都定义了运算符。因此,作为类编写器,您可以定义一个方法,包括Comparable,并免费获得六个比较函数

(免费在线)鹤嘴锄书中提供了完整的示例:
(向下滚动两段至“mixin为您提供了一种奇妙的控制方式…”

实现隐式实现>也会吗?啊,需要“包括可比较的”