[#100689] [Ruby master Feature#17303] Make webrick to bundled gems or remove from stdlib — hsbt@...
Issue #17303 has been reported by hsbt (Hiroshi SHIBATA).
11 messages
2020/11/02
[#100852] [Ruby master Feature#17326] Add Kernel#must! to the standard library — zimmerman.jake@...
Issue #17326 has been reported by jez (Jake Zimmerman).
24 messages
2020/11/14
[#100930] [Ruby master Feature#17333] Enumerable#many? — masafumi.o1988@...
Issue #17333 has been reported by okuramasafumi (Masafumi OKURA).
10 messages
2020/11/18
[#101071] [Ruby master Feature#17342] Hash#fetch_set — hunter_spawn@...
Issue #17342 has been reported by MaxLap (Maxime Lapointe).
26 messages
2020/11/25
[ruby-core:101158] [Ruby master Feature#17355] Or-patterns (pattern matching like Foo(x) | Bar(x))
Issue #17355 has been updated by Dan0042 (Daniel DeLorme).
Or-patterns _are_ supported, just not with variable assignment. I agree with the request but the title of the ticket is a bit misleading.
But I think the `user_email` example actually makes a rather good case for the usefulness of And-patterns:
```ruby
def user_email(user)
case user
in (User | Admin | Moderator) & {email:} then email
end
end
```
----------------------------------------
Feature #17355: Or-patterns (pattern matching like Foo(x) | Bar(x))
https://bugs.ruby-lang.org/issues/17355#change-88844
* Author: decuplet (Nikita Shilnikov)
* Status: Open
* Priority: Normal
----------------------------------------
Given pattern matching is officially supported in Ruby 3, I have an idea about making it more flexible.
Currently, this piece of code produces a syntax error
```ruby
case [1, 2]
in [1, a] | [a, 3] => a then a
end # duplicated variable name
```
Duplications don't seem to be a problem here, semantically-wise. We just need to check if all patterns have the same set of names. It's supported in OCaml (also here's an RFC in Rust https://github.com/rust-lang/rust/issues/54883) so I think it can work in Ruby too.
I've been using pattern matching in Ruby since day 1 and it worked great so far. Since I use OCaml daily too I miss this feature every once in a while :)
A more practical example: imagine you have code like this
```ruby
def user_email(user)
case user
in User(email:) then email
in Admin(email:) then email
in Moderator(email:) then email
end
end
```
Clearly, it could be simplified if or-patterns were supported:
```ruby
def user_email(user)
case user
in User(email:) | Admin(email:) | Moderator(email:) then email
end
end
```
I'd like to know @ktsj's thoughts on this.
--
https://bugs.ruby-lang.org/
Unsubscribe: <mailto:[email protected]?subject=unsubscribe>
<http://lists.ruby-lang.org/cgi-bin/mailman/options/ruby-core>