case 文
参考:
Ruby で switch 文はどう書くの? | ぺけみさお
Ruby の case を〇〇 (言語名) の switch 文だと思っている人たちにぼくから一言ガツンと申し上げたい | hp12c
Ruby の case 文は when 節に渡すオブジェクトによって振る舞いが異なる | 一から勉強させてください
Ruby’s case statement | Honeybadger Developer Blog
=== 演算子
参考:
Ruby の case 式と === 演算子について | しばそんノート
Can procs be used with case statements in Ruby 2.0? – Stack Overflow
case 文で正規表現 (Regexp) を使う
case name when /Alice|Bob/ puts "Hello!" else puts "Bye!" end
参考:
case 文でも正規表現が使えるんです (ドヤ顔) | Bye Bye Moore
case 文の条件で正規表現を使って内部でマッチ部分を使いたいとき – Qiita
クラスを判別する
when
の後にクラスを列挙する。
class A; end; class B; end case A.new when A, B then puts "This is A or B." else "I don't know." end
参考:
ruby におけるポリモーフィズムでサブクラス名による条件分岐 – teratail
case で変数のクラスを比較しようとすると上手く行かない – スタック・オーバーフロー
Lambda / Proc を使う
Proc
のインスタンスを渡した場合に ===
の代わりに call
が呼ばれる。(Proc#===
は Proc#call
のエイリアス。)
参考:
Ruby の case 文で配列に特定の値が含まれているかチェックする方法 – Qiita
Lambdas / Procs in Case Expressions | think (batsov.com)
instance method Proc#=== (Ruby 2.6.0)
Can procs be used with case statements in Ruby 2.0? – Stack Overflow
case 文で if 文と同じように真偽を判定する
case Object.new when -> (x) { !!x } then "This is truthy." when nil, false then "This is falsy." end
参考:
Bool 値かどうか型チェックしたい。ついでに is_bool? メソッドを作ってみた。| かもメモ
Ruby の true と false の話 – Qiita
case 文で条件式を使う
※ 非推奨
case
文で true
を与えるか、あるいは値を与えなかった場合、複数の条件式を判定して条件分岐することができる。通常の if 文 (if … elsif … else … end) を使って書ける。
case true
を使った場合
case true when obj.nil? then puts "This is nil." when obj.is_a?(A) then puts "This is A." when obj.is_a?(B) then puts "This is B." else puts "This is unknown." end
値なしの case
文
case when obj.nil? then puts "This is nil." when obj.is_a?(A) then puts "This is A." when obj.is_a?(B) then puts "This is B." else puts "This is unknown." end
通常の if
文を使って書ける。
if obj.nil? then; puts "This is nil." elsif obj.is_a?(A) then; puts "This is A." elsif obj.is_a?(B) then; puts "This is B." else puts "This is unknown." end
参考:
Ruby 条件分岐について (if, unless, case, 三項演算子) | TASK NOTES
‘case true’ when does it block loop? – Stack Overflow
Tips
参考: