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

このブログにコメントするにはログインが必要です。
さんログアウト
この記事には許可ユーザしかコメントができません。