From: sawadatsuyoshi@... Date: 2019-03-22T10:04:33+00:00 Subject: [ruby-core:91928] [Ruby trunk Feature#15722] `Kernel#case?` Issue #15722 has been updated by sawa (Tsuyoshi Sawada). osyo (manga osyo) wrote: > How about `Enumerable#case?` ? > Comparing with `===` like `Enumerable#include?`. > > ```ruby > bar # => "bar" > ["foo", "bar", "baz"].case? bar # => true > ["qux"].case? bar # => false > [Symbol, String].case? bar # => true > [Array].case? bar # => false > ``` What is to be evaluated is `bar`, not the objects that you put in the arrays. `bar` has to come on the left side. That also matches with how `case`-construction works. Furthermore, having an array as in your proposal requires additional array to be created, which will be immediately disposed. ---------------------------------------- Feature #15722: `Kernel#case?` https://bugs.ruby-lang.org/issues/15722#change-77260 * Author: sawa (Tsuyoshi Sawada) * Status: Open * Priority: Normal * Assignee: * Target version: ---------------------------------------- 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 `==`. -- https://bugs.ruby-lang.org/ Unsubscribe: