«前の日記(2003年08月25日) 最新 次の日記(2003年08月27日)» 編集

Matzにっき


2003年08月26日 [長年日記]

_ [Ruby]多重代入

scanfの辺りで悩んだことからきているのだが、また多重代入の挙動で悩んでいる。

いろいろな条件が重なっているので、全体として見るととても複雑で、 自分でも「なんでこうなっているんだろう」と悩むような部分があり、 何ヶ月かおきに「挙動を変えよう」と思ったりする。

しかも、こんなすみっこの挙動に関心を持つ人がいないので、誰にも相談するわけにもいかず (akrさんなら気が向けば考えてくれるかも)、結局自分一人で考えるしかない。

今回問題にしているのは

"a".scan(/(.)/){|*a| p a}

の出力が[["a"]]なのに、

"ab".scan(/(.)(.)/){|*a| p a}

の出力が["a", "b"]である点だ。

いっそ多値でも導入しようかという気にもなるのをぐっと押さえて、いろいろ考える。 結論としては

  • 1要素以下の配列を特別扱いしているのが違和感のもと
  • いっそ配列は全部同じ扱いにしては

というもの、これで後者の出力は[["a", "b"]]になる。 多重代入では

a,b = 1,2
a,b = [1,2]

は同じように動作するので、この変更による影響はあまり大きくないと思う。 いや、本当に大きくないかはやってみないと分からないな。 実際に修正して、試してみよう。「ぎゃっ」と言う人が多ければ考え直すことにして。


«前の日記(2003年08月25日) 最新 次の日記(2003年08月27日)» 編集