Bug #20974
open
Required and optional anonymous parameter show differently in Proc#parameters
Added by alanwu (Alan Wu) 1 day ago.
Updated 1 day ago.
Description
The following has had the same output since Ruby 1.9, when Proc#parameters was introduced:
p(proc { |(_a)| }.parameters) # => [[:opt, nil]]
p(lambda { |(_a)| }.parameters) # => [[:req]]
I think they should be [[:opt]]
and [[:req]]
or [[:opt, nil]]
and [[:req, nil]]
. I prefer the nil-free option since that feels more anonymous.
- Related to Bug #20955: Subtle differences with Proc#parameters for anonymous parameters added
- Description updated (diff)
It's not hard to patch this small issue. We need consensus on whether this is an issue and what the new behavior should be, though.
diff --git a/iseq.c b/iseq.c
index 639ca3a4cd..d5808b81a5 100644
--- a/iseq.c
+++ b/iseq.c
@@ -3606,7 +3606,9 @@ rb_iseq_parameters(const rb_iseq_t *iseq, int is_proc)
if (is_proc) {
for (i = 0; i < body->param.lead_num; i++) {
PARAM_TYPE(opt);
- rb_ary_push(a, rb_id2str(PARAM_ID(i)) ? ID2SYM(PARAM_ID(i)) : Qnil);
+ if (rb_id2str(PARAM_ID(i))) {
+ rb_ary_push(a, ID2SYM(PARAM_ID(i)));
+ }
rb_ary_push(args, a);
}
}
Also available in: Atom
PDF
Like0
Like0Like0Like0