http://dev.ariel-networks.com/wp/archives/755
それJavaScriptでも出来るよネタ。
Firefox限定ですが。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 |
function makePseudoArray(length) { var arr = Proxy.create({ get: function(receiver, name) { return name == 'length' ? length : +name; }, getPropertyDescriptor: function(name) { return { value: this.get(this, name), writable: true, enumerable: true, configurable: true }; } }); return arr; } var $break = {}; var result = []; try { Array.forEach(makePseudoArray(0x1fffffffffffff), function(n) { n += 1; switch (true) { case n >= 100: throw $break; case !(n%15): result.push('Fizz Buzz'); break; case !(n%3): result.push('Fizz'); break; case !(n%5): result.push('Buzz'); break; default: result.push(n); } }); } catch (e if e === $break) { console.log(result.join(',')); } |
無限と言っておきながら上限が決まっている(jsの数値の限界)のと、
ループを例外で抜ける(prototype.js方式)のが微妙です。
uchida
書いてから気づきましたが、Firefox限定でいいのならジェネレータ使った方がまともですね。