scanfの辺りで悩んだことからきているのだが、また多重代入の挙動で悩んでいる。
いろいろな条件が重なっているので、全体として見るととても複雑で、 自分でも「なんでこうなっているんだろう」と悩むような部分があり、 何ヶ月かおきに「挙動を変えよう」と思ったりする。
しかも、こんなすみっこの挙動に関心を持つ人がいないので、誰にも相談するわけにもいかず (akrさんなら気が向けば考えてくれるかも)、結局自分一人で考えるしかない。
今回問題にしているのは
"a".scan(/(.)/){|*a| p a}
の出力が[["a"]]なのに、
"ab".scan(/(.)(.)/){|*a| p a}
の出力が["a", "b"]である点だ。
いっそ多値でも導入しようかという気にもなるのをぐっと押さえて、いろいろ考える。 結論としては
というもの、これで後者の出力は[["a", "b"]]になる。 多重代入では
a,b = 1,2 a,b = [1,2]
は同じように動作するので、この変更による影響はあまり大きくないと思う。 いや、本当に大きくないかはやってみないと分からないな。 実際に修正して、試してみよう。「ぎゃっ」と言う人が多ければ考え直すことにして。