Project

General

Profile

Actions

Feature #15722

open

`Kernel#case?`

Added by sawa (Tsuyoshi Sawada) over 2 years ago. Updated over 1 year ago.

Status:
Feedback
Priority:
Normal
Assignee:
-
Target version:
-
[ruby-core:91924]

Description

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:

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:

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.

Actions

Also available in: Atom PDF