Issue #15722 has been updated by nobu (Nobuyoshi Nakada).


osyo (manga osyo) wrote in #note-6:
> 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
> ```

As a `case expr` statement doesn't need a terminator (newline or semicolon) before `when`, it conflicts with the current syntax.

----------------------------------------
Feature #15722: `Kernel#case?`
https://bugs.ruby-lang.org/issues/15722#change-84435

* Author: sawa (Tsuyoshi Sawada)
* Status: Feedback
* 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: <mailto:ruby-core-request / ruby-lang.org?subject=unsubscribe>
<http://lists.ruby-lang.org/cgi-bin/mailman/options/ruby-core>