Получить имя входной переменной в функции - PullRequest
0 голосов
/ 29 апреля 2018

На этот вопрос сложно ответить. С учетом функции, подобной той, которая отображается, как вы получите имя входной переменной для целей отладки. т.е.) root -> root.left -> root.right -> root.left.right -> etc ... или т. е.) дерево -> tree.left -> tree.right -> tree.left.right -> etc ...

function TreeNode(val) {
    this.val = val;
    this.left = this.right = null;
}
var sum = function(root) {
    console.log(root);
    if(root === null) return 0;
    return root.val + sum(root.left) + sum(root.right);
}

let tree = new TreeNode(1);
tree.left = new TreeNode(2);
tree.right = new TreeNode(3);
tree.left.right = new TreeNode(4);
let x = sum(tree);
console.log(x);

По сути, я хочу console.log () имя переменной, а не root в функции sum.

Ответы [ 2 ]

0 голосов
/ 29 апреля 2018

Вы можете изменить функцию sum для целей отладки:

function sum(root, path) {
  if(!path) {
    path = 'root';
  }
  console.log(path);
  if(root === null) return 0;
  return root.val + sum(root.left, path+'.left') + sum(root.right, path+'.right'); 
}
0 голосов
/ 29 апреля 2018

По сути, я хочу console.log () имя переменной, а не root в функции sum.

Ты не можешь. Когда вызывается ваша функция sum, ей передается значение. Это значение является указателем на объект, и нет никакой связи с переменной, из которой поступил указатель. Если вы сделали это:

let tree = new TreeNode(1);
let x = y = tree;
sum(x);
sum(y);

не будет никакой разницы в двух вызовах sum(). Каждому из них было передано одно и то же значение (указатель на объект TreeNode), и в функции sum() отсутствует ссылка на x, y или tree.

Если вам нужна дополнительная информация (например, имя переменной) для целей отладки и / или ведения журнала, то вам, возможно, придется передать это дополнительное имя в функцию, чтобы вы могли зарегистрировать его.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...