我正在尝试将函数分配给多个变量,该函数调用另一个函数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
,其他所有变量都一样,谢谢。
答案 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)