在这些循环中,我一直在寻找自己,我在这些循环中通过用户输入来确保自己得到了期望的结果。但是,我不知道如何在未定义函数的情况下调用它,这给我造成了错误:no-use-before-define。
PB = list(filter(lambda x: '1' not in x, PB))
LB = list(filter(lambda x: '1' not in x, LB))
无论我定义这两个函数的顺序如何,其中一个都会在定义之前调用另一个函数。
这在语法上似乎是有效的,但是鉴于eslint错误,如果我希望避免该错误,我还可以使用其他模式吗?
答案 0 :(得分:1)
尽管两个函数可以互相调用可能会更好,但您最好使用while
循环来保持清晰(这就是它的目的)并遵守编码标准,从而完全避免错误,像这样:
function getInput() {
var no_valid_input = true;
var input = null;
while (no_valid_input) {
input = askForInput();
if (input !== 'bad') {
no_valid_input = false;
} else {
alertBadInput();
}
}
processInput();
}
工作示例:
function processInput() {
return alert('Yep, processing...');
}
function alertBadInput() {
return alert('Nope');
}
function askForInput() {
return prompt('What?');
}
function getInput() {
var no_valid_input = true;
var input = null;
while (no_valid_input) {
input = askForInput();
if (input !== 'bad') {
no_valid_input = false;
} else {
alertBadInput();
}
}
processInput();
}
getInput();
答案 1 :(得分:1)
虽然它并没有真正解决问题,但对于特定用例禁用它可能是有意义的。
// eslint-disable-next-line no-use-before-define
像这样使用它:
function tryAgain(){
alertBadInput();
// eslint-disable-next-line no-use-before-define
getInput();
}
function getInput(){
var input = askForInput();
if (input === 'bad') {
tryAgain();
return;
}
processInput(input);
}
我不得不在具有类的模块中使用它,我不想在其中公开特定于类的函数(格式与以下代码类似)。翻转类和函数会产生相同的 eslint 错误。
要么是:
prepare
在 Request
之前,其中 Request
被 prepare
使用,或Request
在 prepare
之前,其中 prepare
被 Request
使用。这显然是一种简化,但为您提供了总体思路:
// function that I don't export
function prepare(request) {
// eslint-disable-next-line no-use-before-define
if (request instanceof Request) {
return JSON.stringify(request.obj)
} else {
return new TypeError('Wrong type given, expected Request')
}
}
// class that export that uses the prepare function
class Request{
constructor() {
this.obj = {}
}
doSomething() {
const request = prepare(this)
// do something with request
}
addX(x) {
this.obj.x = x
}
}
module.exports = Request