IT戦記 このページをアンテナに追加 RSSフィード Twitter

2008-02-12

すべてのオブジェクトをキーにできるハッシュの様なもの

どうやったら効率的なものを書けるだろうか

Dictionary = function() {
  var self = function(k, v) {
    var state = self.state;
    if (v === undefined) {
      return state(k);
    }
    else {
      self.state = state(k) === v ? state : function(a) { return a === k ? v : state(a) }
      return v;
    }
  };
  self.state = function(k) { return undefined };
  return self;
};

var dict = new Dictionary;

dict(1, 2)
dict('1', 3)

var f = function() { hoge };
var g = function() { fuga };

dict(f, 4)
dict(g, 5)

console.log(dict (1)); // => 2
console.log(dict ('1')); // => 3
console.log(dict (f)); // => 4
console.log(dict (g)); // => 5

furyu-teifuryu-tei 2008/02/15 21:15 Firefox 2.0.0.12(+Firebug)で1000個登録したら、”too much recursion”エラーになっちゃいました(>_<)。
#http://furyu.tea-nifty.com/annex/2008/02/javascript_28fd.html

はてなユーザーのみコメントできます。はてなへログインもしくは新規登録をおこなってください。