From: "Eregon (Benoit Daloze)" Date: 2021-12-04T17:48:29+00:00 Subject: [ruby-core:106488] [Ruby master Bug#18385] Refinement#import_methods(Enumerable) doesn't work 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: