将函数分配给多个变量而无需引用

时间:2019-08-26 13:02:13

标签: javascript node.js

我正在尝试将函数分配给多个变量,该函数调用另一个函数TextField( controller: ..., decoration: InputDecoration( icon: Icon(...), //Icon outside prefixIcon: Icon(...), //Icon at the beginning suffixIcon: Icon(...), //Icon at the end ), ), ,我希望getFuncName()返回被调用的函数的名称。

getFuncName

当错误被调用时,它会打印function getFuncName() { return getFuncName.caller.name; } const error = warning = info = verbose = debug = silly = message => { console.log(getFuncName()) } ,与警告,信息,详细和调试相同。 我希望如果错误被调用,它将打印silly,其他所有变量都一样,谢谢。

4 个答案:

答案 0 :(得分:1)

唯一的方法是:

const error = message => {
  console.log(getFuncName())
}

const warning = error
const info = error
// etc

另一方面,您为什么要这样做?也许您想提高日志级别?在这种情况下,您可以这样做(高阶函数):

const logger = level => message => {
  console.log(level, ': ', getFuncName())
}

const error = logger('error')
// etc

答案 1 :(得分:1)

请勿使用Function.caller,它是非标准的,并且在浏览器之间的行为也不相同。在严格模式下也不起作用:

'use strict';

function foo () {
  function bar () {
    console.log(bar.caller.name);
  }
  
  return bar();
}

foo();

只需使用部分应用程序为message => { ... }创建一个闭包:

'use strict';

const logger = type => message => {
  console.log(type, message);
};

const error = logger('error');
const warning = logger('warning');
const info = logger('info');
const verbose = logger('verbose');
const debug = logger('debug');
const silly = logger('silly');

error('foo');
info('bar');

答案 2 :(得分:0)

在您的代码中,除了getFuncName外,仅存在一个单个函数。它通过6个不同的变量来引用,但是只有一个函数,只有一个名称

您不能期望同一函数在不同时间具有不同的名称。当匿名函数出现在分配给变量的代码中时,解释器可以为其指定默认名称-如果将匿名函数一次分配给多个变量,则最右边的变量名(在您的情况下为“傻”)被认为是函数的名称。

答案 3 :(得分:-1)

@Patrick Roberts的答案的一线解决方案:

from difflib import SequenceMatcher

def similar(a, b):
    match_score = SequenceMatcher(None, a, b).ratio()
    if match_score == 1.0:
        result = "Full Match"
    elif match_score >= .85:
        result = "Partial Match"
    else:
        result = "No Match"
    return result

df["result"]=df[['one','two']].apply(lambda df: similar(df.one, df.two), axis=1)