challenge ローカル変数の一覧を取得

リフレクション系のお題の続編です。 ローカル変数の内容を取得して連想配列(ハッシュ、辞書など)に詰める コードを書いてください。

Pythonで表現すると、下のコードの???部分を埋めることになります。

>>> def foo():
	x = 1
	y = "hello"
	???
	return result

>>> foo()
{'y': 'hello', 'x': 1}

Posted feedbacks - JavaScript

関数のソースを解析して、変数名を抽出し、evalで値を求めています。 ソース解析処理がすごく適当なので、一つのvarに複数の変数が定義されている場合に対応していないです。
 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
Function.prototype.listLocalVariableNames = function() {
  var regexp = /var\s+(\w+)/g;
  var source = this.toString();
  var match = null;
  var variables = [];
  while(match = regexp.exec(source)) {
    variables.push(match[1]);
  }
  return variables;
}

Array.prototype.toHash= function(iter) {
  var hash = {};
  for(var i=0; i<this.length; i++) {
    try {
      hash[this[i]] = iter(this[i]);
    } catch(e) {
      // エラーはパス
    }
  }
  return hash;
};

function func() {
  var x = 1;
  var y = "hello";

  return arguments.callee.listLocalVariableNames().toHash(function(p) {
    return eval(p);
  });
}

var variablesMap = func();
for(var prop in variablesMap) {
  alert(prop + " => " + variablesMap[prop]);
}

Index

Feed

Other

Link

Pathtraq

loading...