Ruby (および Rails) での発見: 大文字と小文字の等価演算子


Ruby は、プログラムの制御フローを制御するメカニズムを提供します.これらは、if ステートメント ファミリー ifelsifelse 、および unless で構成されます. case/when とともに.

「case/when 構造の基本的な考え方は、オブジェクトを取得し、一致する一連のテストをカスケードし、成功したテストに基づいてアクションを実行することです.」. Black, D. A., & Leo, J. (2019).地に足の着いたRubyist.マニング.

典型的なケースステートメントは次のようになります

tool = "google"

case tool
when "google"
   puts "tool is google"
when "basecamp"
   puts "tool is basecamp"
else
  puts "unknown tool"
end


すべての ruby​​ オブジェクトには、 === と呼ばれる大文字と小文字の等価メソッド、トリプル等号があり、大文字と小文字を区別する演算子または threequal 演算子と呼ばれることもあります.
when tool.=== "google" を行う代わりに. when "google" キーワードは、以前のアプローチに構文糖衣を提供します.

threeequal 演算子は、すべての組み込みクラスのあらゆる場所で定義されています.定義したクラスに実装することもできます.
Car クラスを定義しましょう.

class Car
  attr_accessor :brand, :type
  def initialize(brand, type)
    self.brand = brand
    self.type = type
  end

  def ===(other_car)                               
    self.brand == other_car.brand
  end
end


これで、case/when と一緒に使用できます.

ford = Car.new "Ford", "F-150"
jeep = Car.new "Jeep", "Wrangler"
tesla_model_x = Car.new "Tesla", "Model-X"
tesla_model_y = Car.new "Tesla", "Model-Y"

case tesla_model_x
when ford
    puts "It's a ford"
when jeep
    puts "It's a Jeep"
when tesla_model_y
    puts "Both are Tesla made"
else
    puts "unknown manufacturer"
end


これを Ruby セッションで実行すると、次のようになります.

Both are Tesla made
=> nil


その下で、Ruby インタープリターは、=== クラス内で定義したオブジェクトの Car メソッドを呼び出します.

  def ===(other_car)                               
    self.brand == other_car.brand
  end


三重等号演算子またはケース包含演算子を使用すると、Ruby の case/when 制御フロー演算子でクラスをエレガントに動作させることができます.

読んでくれてありがとう、ハッピーコーディング.

資力


  • The Well-Grounded Rubyist