[#101179] Spectre Mitigations — Amel <amel.smajic@...>
Hi there!
5 messages
2020/12/01
[#101694] Ruby 3.0.0 Released — "NARUSE, Yui" <naruse@...>
V2UgYXJlIHBsZWFzZWQgdG8gYW5ub3VuY2UgdGhlIHJlbGVhc2Ugb2YgUnVieSAzLjAuMC4gRnJv
4 messages
2020/12/25
[ruby-core:101392] [Ruby master Feature#17380] Useful `include/prepend` in `refine`
From:
daniel@...42.com
Date:
2020-12-10 13:45:40 UTC
List:
ruby-core #101392
Issue #17380 has been updated by Dan0042 (Daniel DeLorme).
It would be nice if `prepend`/`include` worked within a `refine` block, but if they don't then at least it should raise an error. In that respect I disagree with closing #17374; even if the result is "expected", the fact that including a module is effectively a no-op should be considered a bug. Silently failing to have an effect is not so good.
----------------------------------------
Feature #17380: Useful `include/prepend` in `refine`
https://bugs.ruby-lang.org/issues/17380#change-89151
* Author: marcandre (Marc-Andre Lafortune)
* Status: Open
* Priority: Normal
* Assignee: matz (Yukihiro Matsumoto)
----------------------------------------
Currently, `prepend/include` within a `refine` block leads to a method not being to see itself, or others defined in the same module:
```ruby
module Code
def recurse(value = nil)
return value if value
recurse(42) # => NoMethodError!!!
end
end
module Extension
refine Object do
include Code
end
end
using Extension
:x.recurse(:y) # => :y (ok)
:x.recurse # => NoMethodError, was hoping for 42
```
I find this unintuitive and not useful.
The conclusion of the current situation from @shugo and others is ["I don't recommend module inclusion to define refined methods"](https://bugs.ruby-lang.org/issues/17374#note-9)
Could we change this situation so it can be recommended to use it?
What I believe would be more useful and is what I expected was that `include/prepend` within a `Module` would bring in the current methods in the Module, with the current refinements activated.
One use-case in particular is to publish libraries where one can give the option to the user to either:
- call `using GreatExtension` in each and every file that need it
- or `MyClass.prepend GreatExtension` once.
While [Jeremy Evans found a way to do it](https://bugs.ruby-lang.org/issues/17374#note-8), it remains challenging and unnatural.
--
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>