[]=(...)
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]);
}