@hanachin_ くん製の fizzbuzz
どうやら Ruby2.0 から導入された遅延評価なソレを使った実装だった模様。ちなみに (* fizz buzz) の剰余が 0 の場合 'fizzbuzz って実装になってたのはダウト認定されたようで大変申し訳ありません。
あれは某所にて「こうしたら?」という助言があって盛り込んだソレだったのですが、あえてエンバグさせて誤りが検出できるかどうかということを試されていた模様。本当に試験って大切だなぁ、と痛感しております。
とゆーことで
彼製の実装は以下な gist で公開されてます。
以下、諸々について列挙してみます。
- コマンド引数を取り出してデフォルト値を鑑みつつ設定
- Enumerable#take メソド
- これが内部的に each を呼び出しているのか
- 遅延評価をがっつり使ってて面白い
- 巨大な配列 (Enumerable) を数え上げながら処理できるって良いよね
- rubyist てきに limit ||= 100 な書き方は nil なら云々という所で使用頻度は高いのだろうな
- (1..Float::INFINITY) で戻る配列について lazy.each で云々
しかしこうして見るに、わしの Ruby なボキャブラリは最低レベルだなorz
ちなみに
変換文字列を取り出す手続きの定義が以下なんですが
def label(n) @label_definitions.lazy.select {|label, denominator| n % denominator == 0 }.map(&:first).first end
剰余が 0 なら {fizzbuzz: 15} なナニが map に渡されて以下な模様。
{fizzbuzz: 15}.map(&:first).first => :fizzbuzz
で、中の条件式が全部偽なら nil が戻るのだろうな。そして関連する資料を見るにクロージャ使って云々、というナニがあって面白げ。