public Method

Object.instance_variable_set(p1, p2)

obj.instance_variable_set(symbol, obj)     obj

Sets the instance variable names by symbol to object, thereby frustrating the efforts of the class’s author to attempt to provide proper encapsulation. The variable did not have to exist prior to this call.

class Fred
  def initialize(p1, p2)
    @a, @b = p1, p2
  end
end
fred = Fred.new('cat', 99)
fred.instance_variable_set(:@a, 'dog')   #=> "dog"
fred.instance_variable_set(:@c, 'cat')   #=> "cat"
fred.inspect                             #=> "#<Fred:0x401b3da8 @a=\"dog\", @b=99, @c=\"cat\">"

Source Code

/*
*  call-seq:
*     obj.instance_variable_set(symbol, obj)    => obj
*  
*  Sets the instance variable names by <i>symbol</i> to
*  <i>object</i>, thereby frustrating the efforts of the class's
*  author to attempt to provide proper encapsulation. The variable
*  did not have to exist prior to this call.
*     
*     class Fred
*       def initialize(p1, p2)
*         @a, @b = p1, p2
*       end
*     end
*     fred = Fred.new('cat', 99)
*     fred.instance_variable_set(:@a, 'dog')   #=> "dog"
*     fred.instance_variable_set(:@c, 'cat')   #=> "cat"
*     fred.inspect                             #=> "#<Fred:0x401b3da8 @a=\"dog\", @b=99, @c=\"cat\">"
*/

static VALUE
rb_obj_ivar_set(obj, iv, val)
   VALUE obj, iv, val;
{
   ID id = rb_to_id(iv);

   if (!rb_is_instance_id(id)) {
       rb_name_error(id, "`%s' is not allowed as an instance variable name", rb_id2name(id));
   }
   return rb_ivar_set(obj, id, val);
}
Comments

Have your say
Please use Textile formatting (click here for a cheat sheet). Use <code/> and <pre/> for code samples.
Click here to login with OpenID to to post comments.