[#106355] [Ruby master Bug#18373] RBS build failure: '/include/x86_64-linux/ruby/config.h', needed by 'constants.o'. — "vo.x (Vit Ondruch)" <noreply@...>
Issue #18373 has been reported by vo.x (Vit Ondruch).
28 messages
2021/12/01
[ruby-core:106488] [Ruby master Bug#18385] Refinement#import_methods(Enumerable) doesn't work
From:
"Eregon (Benoit Daloze)" <noreply@...>
Date:
2021-12-04 17:48:29 UTC
List:
ruby-core #106488
Issue #18385 has been updated by Eregon (Benoit Daloze).
Assignee set to shugo (Shugo Maeda)
It means you can't import methods defined in C, only methods defined with Ruby code.
Methods need to be defined in Ruby code to be affected by refinements (e.g. other refinements in that `refine` block or under `M`).
So for example this wouldn't work if you define `each` inside `refine String do` since those C methods wouldn't know how to find `each` with refinements.
(it would work on Ruby implementations where Enumerable is defined in Ruby code, interestingly)
@shugo WDYT?
----------------------------------------
Bug #18385: Refinement#import_methods(Enumerable) doesn't work
https://bugs.ruby-lang.org/issues/18385#change-95144
* Author: zverok (Victor Shepelev)
* Status: Open
* Priority: Normal
* Assignee: shugo (Shugo Maeda)
* Backport: 2.6: UNKNOWN, 2.7: UNKNOWN, 3.0: UNKNOWN
----------------------------------------
Very simple to reproduce:
```ruby
module M
refine String do
import_methods Enumerable
end
end
```
Leads to: `import_methods': Can't import method: Enumerable#drop (ArgumentError)`
Which, grepping through code, seems to be raised [here](https://github.com/ruby/ruby/blob/master/eval.c#L1529) but I am not versed enough in Ruby internals to debug further.
An attempt to `import_methods Comparable` leads to the same problem, BTW: `Can't import method: Comparable#between?`
Am I missing something crucial about `import_method` behavior?
--
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>