我在我的代码中以两种方式调用对象方法:
@app.task(name='celery.ping')
def ping():
# type: () -> str
"""Simple task that just returns 'pong'."""
return 'pong'
;
或
start_worker
我将隐藏和显示条件作为字符串传递,稍后进行评估并用作方法。请注意条件:if(效果==='显示/隐藏')。
this.reveal.updateVisuals(i, 'show')
然而代码似乎是重复的,我想知道是否有办法将hide或show作为方法传递给方法并在需要时将其应用于数组。我试过这样的事情:
this.reveal.updateVisuals(ⅰ).show
答案 0 :(得分:2)
有很多方法可以用来简化这个,这里有几个:
updateVisuals: function (time, effect) {
if (this.breakpointsMap && typeof this.breakpointsMap[checkTime] !== "undefined") {
this.breakpointsMap[checkTime].forEach(e => e[effect]());
}
}
或者返回数组:
updateVisuals: function (time, effect) {
if (this.breakpointsMap && typeof this.breakpointsMap[checkTime] !== "undefined") {
return this.breakpointsMap[checkTime];
}else{
return [];
}
}
this.reveal.updateVisuals(i).forEach(e => e.show());
答案 1 :(得分:1)
您可以使用[方括号]表示法通过它的(字符串)名称访问方法属性。
updateVisuals: function (time, effect) {
// Check if parameter exists and property can be read
if (this.breakpointsMap && typeof this.breakpointsMap[checkTime] !== "undefined") {
var k = this.breakpointsMap[checkTime].length;
while (k--) {
try {
this.breakpointsMap[checkTime][k][effect]();
} catch (err) {}
}
}
}
答案 2 :(得分:0)
如果您使用的是Es6,则可以执行以下操作:
function updateVisuals (time, effect) {
// Check if parameter exists and property can be read
if (this.breakpointsMap && typeof this.breakpointsMap[checkTime] !== "undefined") {
let execFn= (arrindex) => breakpointsMap[checkTime][arrindex].show();
if (effect === 'hide')
{
execFn = (arrindex) => breakpointsMap[checkTime][arrindex].hide();
}
// display the items that were fast forwarded
var k = this.breakpointsMap[checkTime].length;
while (k--) {
try {
execFn(k);
} catch (err) {}
}
}
}
我假设var checkTime是全局的或者是闭包的。如果您使用的是版本较低的tan es6,则可以使用execFn = function(arrindex){...},然后在调用方法后绑定此参数。