Actions
Feature #11476
closedMethods defined in Refinements cannot be called via send
Feature #11476:
Methods defined in Refinements cannot be called via send
[ruby-core:<unknown>]
Description
class C end
module M
refine C do
def a() p:hello end
def b() p:world end
end
end
using M
C.new.a
C.new.send :b
% ruby -v t.rb
ruby 2.3.0dev (2015-08-22 trunk 51660) [x86_64-darwin14]
:hello
t.rb:13:in `<main>': undefined method `b' for #<C:0x007f86c9a12af0> (NoMethodError)
Updated by shugo (Shugo Maeda) almost 11 years ago
- Tracker changed from Bug to Feature
- Status changed from Open to Assigned
- Assignee changed from shugo (Shugo Maeda) to matz (Yukihiro Matsumoto)
It's an intended behavior that Kernel#send ignores refinements as described at https://bugs.ruby-lang.org/projects/ruby-trunk/wiki/RefinementsSpec
What do you think of it, Matz?
Updated by matsuda (Akira Matsuda) almost 11 years ago
Aah, I'm sorry that I missed that part of the documentation.
But indeed I felt the behaviour weird while using the feature in a real-world library.
Updated by matz (Yukihiro Matsumoto) almost 10 years ago
Accepted.
The current behavior is according to the direct interpretation of the refinement spec. But many people expect send to be another form of a method call (including refinement). And now I agree with it.
Matz
Updated by shugo (Shugo Maeda) over 9 years ago
- Has duplicate Feature #12079: Loosening the condition for refinement added
Updated by nobu (Nobuyoshi Nakada) over 9 years ago
- Status changed from Assigned to Closed
Applied in changeset r56450.
vm_insnhelper.c: refinements with send
- vm_insnhelper.c (vm_call_opt_send): enable refinements with
Kernel#sendandBasicObject#__send__. [Feature #11476]
Actions