OSバージョンを上げたついでに、llevalにも手を入れたので変更点など。
node.js はじめました
(Java|ECMA)Scriptの実装をSpiderMonkeyからnode.jsに変更しました。
これによって、今まで標準出力するメソッドは print()
ではなく console.log()
になります。
for (var i = 1; i <= 30; i++) console.log ( i % 15 ? i % 5 ? i % 3 ? i : 'Fizz' : 'Buzz' : 'FizzBuzz' );
es6もサポートしたかったので、node.jsのバージョンは0.11です。言語指定を js
から es6
とすることにより、--harmony
付きで実行されます。
function *fizzBuzz() { for (var i = 1; i <= 30; i++) { var fz = ''; if (i % 3 == 0) fz += 'Fizz'; if (i % 5 == 0) fz += 'Buzz'; yield fz || i; } } for (n of fizzBuzz()) console.log(n);
Ruby 2.1 の Refinements はもっと Refine するべきな件
で、ruby 2.1 もサポート開始しました。言語指定はrb21
です。
それで気がついたのですが、Refinementsの実装…
あえて言おう、カスであると!
module FizzBuzz refine Fixnum do def fizzbuzz() fz = '' if (self % 3 == 0) then fz += 'Fizz' end if (self % 5 == 0) then fz += 'Buzz' end if (fz == '') then self.to_s else fz end end end end (1..30).each do |n| using FizzBuzz puts n.fizzbuzz end puts 42.fizzbuzz # why?
いくら refine
が lexical scope でも、using
がそうでないって一体…
こういう逃げ道があることはあるけど…
module FizzBuzz refine Fixnum do def fizzbuzz() fz = '' if (self % 3 == 0) then fz += 'Fizz' end if (self % 5 == 0) then fz += 'Buzz' end if (fz == '') then self.to_s else fz end end end end eval <<EOB (1..30).each do |n| using FizzBuzz puts n.fizzbuzz end EOB puts 42.fizzbuzz
おわりに
あいかわらず無保証なので、それを理解した上でご利用ください。
Enjoy!
Dan the Maintainer Thereof
このブログにコメントするにはログインが必要です。
さんログアウト
この記事には許可ユーザしかコメントができません。