Issue #16994 has been updated by Dan0042 (Daniel DeLorme).


I just thought of something...
In the same way that `"str".freeze` is optimized to be deduplicated, `%w[a b].include?(obj)` could be optimized so it becomes equivalent to `obj == -"a" || obj == -"b"`, or something around those lines. This would have the advantage that all existing ruby code that uses this pattern would automatically become faster, without having to convert to a new literal syntax.

----------------------------------------
Feature #16994: Sets: shorthand for frozen sets of symbols / strings
https://bugs.ruby-lang.org/issues/16994#change-87388

* Author: marcandre (Marc-Andre Lafortune)
* Status: Open
* Priority: Normal
----------------------------------------
I would like a shorthand syntax for *frozen Sets of symbols or of strings*.

I am thinking of:

```ruby
%ws{hello world} # => Set['hello', 'world'].freeze
%is{hello world} # => Set[:hello, :world].freeze
```

The individual strings would be frozen. These literals would be created once at parse time (like Regex are):

```ruby
def foo
  p %ws{hello world}.object_id
end
foo
foo # => prints the same id twice
```

We should consider these sets to return a unique frozen `to_a`. 

Reminder: Ruby has literal notations for `Rational` and `Complex`. I've sadly never had to use either.
I would venture to say that `Complex` is much less used than `Sets`, and that sets are underused.

Reminder: previous discussion for builtin syntax was not for frozen literal, strings or symbols specifically: https://bugs.ruby-lang.org/issues/5478

For builtin notations for generic sets (i.e. *unfrozen* or containing *other than string/symbol*), please discuss in another issue.



-- 
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>