まずはテンプレート制約を使ったコンパイル時fibonacci
こんな風に、template temp(T) if(expr)みたいに書くと、if文で判定してテンプレートを適用してくれるみたいです。
これを使うと以前のstatic if文を使ったfizzbuzzも、
static if文を並べるよりは綺麗に見えるんじゃないでしょうか。適用可能なテンプレートが複数あるとエラーになるので、if文がちょっとアレな感じはありますが。
ここで、以前書いたmixin FizzBuzzを見ると、(このコードだとmixinする意味が謎ですが)
こんなふうにFizzBuzzの判定をする関数を作って利用してますが、D言語はコンパイル時に関数を実行出来るスゴイ奴があるので、
このように何も考えなくてもコンパイル時fizzbuzzできますね。
fizzbuzzなんか書いてないで勉強しないといけないんですが。
※追記
早速ご指摘頂きました。
@rigibun dmd 2.064 から導入された eponymous template 使うと fizzbuzz をもっと短くできますね.
enum fizzbuzz(ulong N) = genFizzBuzzString(N);
— tom tan (@tm_tn) 2013, 12月 7
@rigibun すみません. ラムダ式使うと genFizzBuzzString も消せました. http://t.co/G1w1RtAu4V
— tom tan (@tm_tn) 2013, 12月 7
templateとか書かなくてもenum fizzbuzz ~ でいけるというdmd 2.064の新機能を使うようです。
さらにラムダを使うとgenFizzBuzzすら要らなかったという話。
究極的にはこれだけでいい
D言語マジで頭おかしい
※更に追記
ラムダとか書かなくても3項演算子で代入する式書くだけだった!!!
@rigibun 度々すみません.ラムダ式すらいらなかったです. http://t.co/08biZbVWZZ D言語すごいな…
— tom tan (@tm_tn) 2013, 12月 7
0 件のコメント:
コメントを投稿