Actions
Feature #19484
openCalling `binding` on a C-level proc raises an `ArgumentError`
Status:
Open
Assignee:
-
Target version:
-
Description
Calling binding
on a C-level proc (from &:symbol
) raises an ArgumentError
, "Can't create Binding from C level Proc" but there is no way to tell if a given proc is a C-level proc before calling binding
on it. It’s possible to rescue this error, but rescuing an exception is slow.
Given that a C-level proc doesn't have a binding, would it make more sense to respond to binding
with nil
rather than raise an error? That would allow us to, for example, look up the receiver and fall back to self, e.g. block.binding&.receiver || self
.
Alternatively, it would be useful to be able to check whether a given proc is a C-Level proc using something like this.
case block
when CProc
block.call(self)
else
block.call
end
Actions
Like0
Like0Like1