From: manga.osyo@... Date: 2020-02-27T04:51:05+00:00 Subject: [ruby-core:97275] [Ruby master Feature#15722] `Kernel#case?` Issue #15722 has been updated by osyo (manga osyo). What about using `#when?` instead of `#case?`? ```ruby bar # => "bar" flag1 = case bar; when "foo", "bar", "baz"; true; end # => true flag2 = case bar; when Symbol, String; true; end # => true # Proposal by sawa flag1 = bar.case? "foo", "bar", "baz" # => true flag2 = bar.case? Symbol, String # => true # Proposal by osyo flag1 = bar.when? "foo", "bar", "baz" # => true flag2 = bar.when? Symbol, String # => true ``` I think this is closer to the syntax of `case when`. And what about adding a oneline `when` like a oneline `in` ? ```ruby bar # => "bar" flag1 = case bar; when "foo", "bar", "baz"; true; end # => true flag2 = case bar; when Symbol, String; true; end # => true flag1 = bar when "foo", "bar", "baz" # => true flag2 = bar when Symbol, String # => true ``` ---------------------------------------- Feature #15722: `Kernel#case?` https://bugs.ruby-lang.org/issues/15722#change-84392 * Author: sawa (Tsuyoshi Sawada) * Status: Open * Priority: Normal ---------------------------------------- I often want to use `===` to match a single object on the right side against multiple objects on the left, as is used in `case`-constructions, just to return a truth value, and end up writing like this: ```ruby bar # => "bar" flag1 = case bar; when "foo", "bar", "baz"; true; end # => true flag2 = case bar; when Symbol, String; true; end # => true ``` I propose `Kernel#case?` that should work like this: ```ruby bar # => "bar" bar.case?("foo", "bar", "baz") # => true bar.case?("qux") # => false bar.case?(Symbol, String) # => true bar.case?(Array) # => false bar.case? # => false ``` It is similar to Rails' `in?`, but it differs from it in that it uses `===` for comparison, not `==`. Or, alternatively, allowing `Kernel#instance_of?` and `Kernel#kind_of?` to allow multiple arguments may be a compromise. -- https://bugs.ruby-lang.org/ Unsubscribe: