Stringの部分文字列を返す[,]演算子は式の左辺におけます。
s = "abcde" s[1,3] = "XXX" puts s # => "aXXXe"
これってなんか違和感ありますよね。s[1,3]は何を返してるんだろうと。
こういった書式、s[1,3]が返すオブジェクトに"XXX"を代入する、という感覚では理解できません。
これはs[1,3]="XXX"でひとまとまり、つまり1,3,"XXX"を引数とするメソッド呼び出しだと考える必要があります。
実際に自分で定義してみると一目瞭然です。
#!/usr/bin/ruby class MyString def []=(index1, index2, r_value) @str = [index1, index2, r_value].join(", ") end def to_s @str end end s = MyString.new puts s[1,3] = "XXX" puts s
$ ruby mystr.rb ABC 1, 3, XXX