[]=(...)
public
Element Assignment—Replaces some or all of the content of
str. The portion of the string affected is determined using the
same criteria as String#[]. If the replacement string is not the
same length as the text it is replacing,
the string will be adjusted accordingly. If the regular expression or
string is used as the index doesn’t
match a position in the string, IndexError is raised. If the regular
expression form is used, the optional second Fixnum allows you to specify which portion of
the match to replace (effectively using the MatchData indexing rules. The forms that
take a Fixnum will raise an IndexError if the value is out of range;
the Range form will raise a RangeError, and the Regexp and String forms will silently ignore the
assignment.
Show source
/*
* call-seq:
* str[fixnum] = fixnum
* str[fixnum] = new_str
* str[fixnum, fixnum] = new_str
* str[range] = aString
* str[regexp] = new_str
* str[regexp, fixnum] = new_str
* str[other_str] = new_str
*
* Element Assignment---Replaces some or all of the content of <i>str</i>. The
* portion of the string affected is determined using the same criteria as
* <code>String
* the text it is replacing, the string will be adjusted accordingly. If the
* regular expression or string is used as the index doesn't match a position
* in the string, <code>IndexError</code> is raised. If the regular expression
* form is used, the optional second <code>Fixnum</code> allows you to specify
* which portion of the match to replace (effectively using the
* <code>MatchData</code> indexing rules. The forms that take a
* <code>Fixnum</code> will raise an <code>IndexError</code> if the value is
* out of range; the <code>Range</code> form will raise a
* <code>RangeError</code>, and the <code>Regexp</code> and <code>String</code>
* forms will silently ignore the assignment.
*/
static VALUE
rb_str_aset_m(argc, argv, str)
int argc;
VALUE *argv;
VALUE str;
{
if (argc == 3) {
if (TYPE(argv[0]) == T_REGEXP) {
rb_str_subpat_set(str, argv[0], NUM2INT(argv[1]), argv[2]);
}
else {
rb_str_splice(str, NUM2LONG(argv[0]), NUM2LONG(argv[1]), argv[2]);
}
return argv[2];
}
if (argc != 2) {
rb_raise(rb_eArgError, "wrong number of arguments (%d for 2)", argc);
}
return rb_str_aset(str, argv[0], argv[1]);
}