instance method · added in Ruby 4.0
Binding#implicit_parameter_defined?
binding.implicit_parameter_defined?(symbol) → obj
proc.c
View on GitHub ↗
static VALUE
bind_implicit_parameter_defined_p(VALUE bindval, VALUE sym)
{
ID lid = check_local_id(bindval, &sym);
const rb_binding_t *bind;
const rb_env_t *env;
if (lid == idIt) lid = idItImplicit;
if (!lid || !rb_implicit_param_p(lid)) {
rb_name_err_raise("'%1$s' is not an implicit parameter",
bindval, sym);
}
GetBindingPtr(bindval, bind);
env = VM_ENV_ENVVAL_PTR(vm_block_ep(&bind->block));
return RBOOL(get_local_variable_ptr(&env, lid, FALSE));
}
Returns true if the numbered parameter or “it” parameter exists.
Example
def foo [42].each do it binding.implicit_parameter_defined?(:it) #=> true binding.implicit_parameter_defined?(:_1) #=> false end { k: 42 }.each do _2 binding.implicit_parameter_defined?(:_1) #=> true binding.implicit_parameter_defined?(:_2) #=> true binding.implicit_parameter_defined?(:_3) #=> false binding.implicit_parameter_defined?(:it) #=> false end end
Ruby version changes
-
4.0
-
Binding#implicit_parameters,Binding#implicit_parameter_get, andBinding#implicit_parameter_defined?have been added to access numbered parameters and “it” parameter. [Bug #21049]
-