diff options
author | Yusuke Endoh <mame@ruby-lang.org> | 2019-08-30 11:01:25 +0900 |
---|---|---|
committer | Yusuke Endoh <mame@ruby-lang.org> | 2019-08-30 11:13:00 +0900 |
commit | 83c6a1ef454c51ad1c0ca58e8a95fd67a033f710 (patch) | |
tree | 1c54ce712e993cf3ddfe9577345ca0b70b7c993d /NEWS | |
parent | 500149709b92ccb36396589a0c39afb3ff77bfb6 (diff) |
proc.c: Add UnboundMethod#bind_call
`umethod.bind_call(obj, ...)` is semantically equivalent to
`umethod.bind(obj).call(...)`. This idiom is used in some libraries to
call a method that is overridden. The added method does the same
without allocation of intermediate Method object. [Feature #15955]
```
class Foo
def add_1(x)
x + 1
end
end
class Bar < Foo
def add_1(x) # override
x + 2
end
end
obj = Bar.new
p obj.add_1(1) #=> 3
p Foo.instance_method(:add_1).bind(obj).call(1) #=> 2
p Foo.instance_method(:add_1).bind_call(obj, 1) #=> 2
```
Diffstat (limited to 'NEWS')
-rw-r--r-- | NEWS | 28 |
1 files changed, 28 insertions, 0 deletions
@@ -160,6 +160,34 @@ Time:: * Added Time#floor method. [Feature #15653] +UnboundMethod:: + + New methods:: + + * Added UnboundMethod#bind_call method. [Feature #15955] + +`umethod.bind_call(obj, ...)` is semantically equivalent to +`umethod.bind(obj).call(...)`. This idiom is used in some libraries to +call a method that is overridden. The added method does the same +without allocation of intermediate Method object. + + class Foo + def add_1(x) + x + 1 + end + end + class Bar < Foo + def add_1 # override + x + 2 + end + end + + obj = Bar.new + p obj.add_1(1) #=> 3 + p Foo.instance_method(:add_1).bind(obj).call(1) #=> 2 + p Foo.instance_method(:add_1).bind_call(obj, 1) #=> 2 + + $LOAD_PATH:: New method:: |