[#115244] [Ruby master Feature#19987] add sample method to Range — "horv77@... (Andras Horvath) via ruby-core" <ruby-core@...>
Issue #19987 has been reported by horv77@protonmail.com (Andras Horvath).
6 messages
2023/11/05
[#115247] [Ruby master Feature#19988] AI for inner code behavior analysis at runtime — "horv77@... (Andras Horvath) via ruby-core" <ruby-core@...>
Issue #19988 has been reported by horv77@protonmail.com (Andras Horvath).
3 messages
2023/11/05
[#115404] Ruby 3.2.2 - rbconfig.rb's MAKEFILE_CONFIG — Jay Mav via ruby-core <ruby-core@...>
Hello Ruby Dev Team,
4 messages
2023/11/17
[ruby-core:115299] [Ruby master Feature#19370] Anonymous parameters for blocks?
From:
"mame (Yusuke Endoh) via ruby-core" <ruby-core@...>
Date:
2023-11-08 01:35:09 UTC
List:
ruby-core #115299
Issue #19370 has been updated by mame (Yusuke Endoh).
We discussed this issue and #19983 at the dev meeting.
* Only method arguments can be delegated by `foo(*)`.
* It should raise a SyntaxError to use `foo(*)` in a block that accepts `*` explicitly.
* It is allowed to use `foo(*)` in a block that does not accept `*` explicitly.
```ruby
def m(*)
->(*) { p(*) } # SyntaxError
->(x, *) { p(*) } # SyntaxError
->(x) { p(*) } #=> 1
proc {|x| p(*) } #=> 1
end
m(1).call(2)
```
The main discussion was as follows.
* `def m(*); ->(*) { p(*) }; end` is indeed confusing.
* We want to prohibit a case where takes `*` and `**` from different blocks, such as `->(&) { ->(**) { ->(*) { foo(*, **, &) } }`.
* We want to allow `def m(*) = @mutex.synchronize { m2(*) }` enclosed in a block that does not accept `*`. So we cannot prohibit to take arguments from outer blocks (or the method arguments).
* Should we allow to take block arguments in unambiguous cases, such as `def m; ->(*) { p(*) }; end` ?
* @knu: In many cases, what we want to delegate is the method arguments.
* @ko1: Once we prohibit it, we can allow the delegation of block arguments later, if it is really needed.
----------------------------------------
Feature #19370: Anonymous parameters for blocks?
https://bugs.ruby-lang.org/issues/19370#change-105217
* Author: zverok (Victor Shepelev)
* Status: Assigned
* Priority: Normal
* Assignee: matz (Yukihiro Matsumoto)
----------------------------------------
Just to clarify: are anonymous parameters delegation is planned to support in blocks?
It would be a nice addition, if it is possible to implement:
```ruby
# data in form [request method, URL, params]:
[
[:get, 'https://google.com', {q: 'Ruby'}, {'User-Argent': 'Google-Chrome'}],
[:post, 'https://gist.github.com', 'body'],
# ...
].each { |method, *| request(method.to_s.upcase, *) }
```
...and at the very least, consistent with what the method definition can have.
If they are NOT planned to be implemented, I believe that at least error messages should be made much clearer, because currently, this would happen while running the code above:
> no anonymous rest parameter (SyntaxError)
I understand the reason (the `request` clause doesn't "see" anonymous parameter of the **block**, and claims that current **method** doesn't have them), but it looks honestly confusing and inconsistent.
--
https://bugs.ruby-lang.org/
______________________________________________
ruby-core mailing list -- ruby-core@ml.ruby-lang.org
To unsubscribe send an email to ruby-core-leave@ml.ruby-lang.org
ruby-core info -- https://ml.ruby-lang.org/mailman3/postorius/lists/ruby-core.ml.ruby-lang.org/