[#114774] [Ruby master Feature#19884] Make Safe Navigation Operator work on classes — "p8 (Petrik de Heus) via ruby-core" <ruby-core@...>
Issue #19884 has been reported by p8 (Petrik de Heus).
13 messages
2023/09/15
[ruby-core:114797] [Ruby master Bug#19888] Can't change binding of a Proc coerced from a Method
From:
"nobu (Nobuyoshi Nakada) via ruby-core" <ruby-core@...>
Date:
2023-09-18 13:23:17 UTC
List:
ruby-core #114797
Issue #19888 has been updated by nobu (Nobuyoshi Nakada).
Status changed from Open to Feedback
Converting `Method` to `Proc` is **not** copying the inner code literally i=
nto a new block.
`Method` is bound to the receiver, while `UnboundMethod` returned by `Modul=
e#instance_method` is not, as the names.
----------------------------------------
Bug #19888: Can't change binding of a Proc coerced from a Method
https://bugs.ruby-lang.org/issues/19888#change-104641
* Author: waiting_for_dev (Marc Busqu=E9)
* Status: Feedback
* Priority: Normal
* Backport: 3.0: UNKNOWN, 3.1: UNKNOWN, 3.2: UNKNOWN
----------------------------------------
`instance_exec` or `instance_eval` can execute a given `Proc` in the contex=
t of the receiver. However, that's not true when the `Proc` has been coerce=
d from a `Method`. In that situation, the binding is always tied to the ori=
ginal instance.
```ruby
class A
def foo
"from A"
end
end
class B
def foo
"from B"
end
end
A.new.instance_exec(&-> { foo }) # =3D> from A
A.new.instance_exec(&B.new.method(:foo)) # =3D> from B
A.new.instance_exec(&B.new.method(:foo).to_proc) # =3D> from B
```
At first sight, that looks like a bug, as the transformation from `Method` =
to `Proc` is not complete.
--=20
https://bugs.ruby-lang.org/
______________________________________________
ruby-core mailing list -- ruby-core@ml.ruby-lang.org
To unsubscribe send an email to ruby-core-leave@ml.ruby-lang.org
ruby-core info -- https://ml.ruby-lang.org/mailman3/postorius/lists/ruby-c=
ore.ml.ruby-lang.org/