Project

General

Profile

Feature #15722

Updated by sawa (Tsuyoshi Sawada) over 1 year ago

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.

Back