Skip to main content

Command Palette

Search for a command to run...

Ruby Comparable Mixin

Published
2 min read

This is my memo about how to implement a Comparable class. The Comparable mixin is useful when we want class instances to be ordered.

# By default, Ruby objects do not support sorting.
class Language
  attr_reader :name

  def initialize(name)
    @name = name
  end
end

languages = [Language.new("Ruby"), Language.new("Dart"), Language.new("Python")]

# Sorting does not work by default.
languages.sort
# ArgumentError: comparison of Language with Language failed

# Different instances are considered as different because each instance has a different object id.
Language.new("Dart") == Language.new("Dart")
#=> false
# Comparable class
class Language
  include Comparable

  attr_reader :name

  def initialize(name)
    @name = name
  end

  # The class must define the <=> operator.
  def <=>(other)
    name <=> other.name
  end
end

languages = [Language.new("Ruby"), Language.new("Dart"), Language.new("Python")]

# Can be sorted based on the <=> operator.
languages.sort
#=> [#<Language:0x007f991b2373a8 @name="Dart">, #<Language:0x007f991b237308 @name="Python">, #<Language:0x007f991b237448 @name="Ruby">]

# Can be compared based on the <=> operator.
Language.new("Dart") == Language.new("Dart")
#=> true

Resources

  • https://docs.ruby-lang.org/en/2.5.0/Comparable.html

More from this blog

Raspberry Pi TensorFlow Liteで物体検出を楽しむ

この記事について Raspberry Pi、TensorFlow、Pythonのいずれにも詳しくない筆者が、物体検出をやって楽しんだ成果の記録です。 TensorFlow公式の物体検出のサンプルプログラムを実行します。 動作環境 ボード Raspberry Pi 4 Model B OS Raspberry Pi OS (32-bit または 64-bit) デスクトップ環境 カメラ Raspberry Pi カメラモジュール v2 Python Python ...

Apr 23, 20231 min read

Elixir Circuits.I2C with Mox

This is written in Japanese. I might convert it to English later, maybe. はじめに Elixirのテストでモックを用意するときに利用するElixirパッケージとして、moxが人気です。Elixir作者のJosé Valimさんが作ったからということもありますが、ただモックを用意するだけではなくElixirアプリの構成をより良くするためのアイデアにまで言及されているので、教科書のようなものと思っています。 一言でいうと「その場...

Dec 3, 20213 min read
M

Masatoshi Nishiguchi's Blog

62 posts