Range#eachはsuccメソッドを内部で呼ぶ、だからRangeにStringを指定することもできる。 しかーし、String#succが常に「正しい」次の文字列を返すとは限らない!そこで、おれおれsuccを定義してやろうじゃないかというお話。 平成生まれの人は知らないかもしれないが、昔懐かしのスーパーマリオブラザーズ1、2の面構成は8ワールドあって、それぞれのワールドには4エリアがある。たとえば2ワールド4エリアは「2-4」と書く。で、次の面は「3-1」だ。ちなみに、4エリアにはクッパが待ち構えている。 「2-4」の次を「3-1」を返すようなおれおれsuccを定義する。ここはRubyらしくModule#extendで特異メソッド(厳密には違うが事実上そういうことで)を動的に定義する。 最後の数字が4のときはワールドの数字「self[0,1]」を次の数字にする。そうでないときはオリジナ