鈍足ランナーのIT日記

走るのが好きな5流のITエンジニアのブログ。

趣味の範囲は広いけど、どれも中途半端なクソブロガー楽しめるWebアプリを作ってあっと言わせたい。サーバーサイドPerl(Mojolicious)、クライアントサイドVue.js。Arduinoにも触手を伸ばす予定。

はこべブログを読み、僕もボーリングゲームをしました

Perlでオブジェク指向になれてないので、いい機会だから ボーリングゲームを実装してみました。 http://hakobe932.hatenablog.com/entry/2014/04/05/153232

私の実装はこんな感じです。テストケースはそのまま使い とりあえずテストは通った。 https://github.com/dokechin/coding-kata-bowling

ゲーム終了の判定とかしてないけれど・・・

Class::Accessor::Liteの使い方

さて、今回学んだことはClass::Accessor::Lite new=>0で使うときの使いk方です。(結構情報がなかった、おろらく一般常識なのかも。 いやいや初心者はたぶんハマるはず?!) new=>1としてしまうと、いろいろ初期化したいロジックをかけないので0で使いますよね。 さて、その時どうするんだというお話

sub new {

  my $klass = shift;
  my $obj = bless {
      (@_ == 1 && ref($_[0]) eq 'HASH' ? %{$_[0]} : @_),
    }, $klass;

# ここで、$objをいろいろと操作する

  return $obj;

}

はい。これだけです。 blessのコードはおじさん、覚えられなくて、いつも露頭に迷うんですが、 Class::Accessor::Liteの中からソースを引っ張ってくれば良くて。 これなら忘れっぽいおじさんにも優しいです。

ボウリング大好きの@dokechinでした。

__mk_newを利用できないか?

sub new {

  my $pkg = shift;

  my $new = __mk_new ($pkg);
  my $obj = $new->($pkg, _@);

# ここで、$objをいろいろと操作する

  return $obj;
}

実行時に__mk_newがないとエラーになってしまった。