我想知道我在代码中做错了什么。我正在尝试执行以下操作:
switch (action.type) {
case TYPES.ADD_TO_FAVORITES:
if (state.faves.length <= 10) {
return assign({}, state, {
faves: state.faves.concat(action.payload),
full: false
});
} else {
return assign({}, state, {
faves: state.faves,
full: true
});
}
default:
return state;
}
我的linter说在default
案例之前添加休息时间,但当我这样做时,它会显示unreachable code
。
答案 0 :(得分:3)
return
将充当break
。没有必要同时使用两者。如果您收到的消息是您有无法访问的代码,那么它就没有任何意义,或者您之前执行的操作在逻辑上是无序的。
答案 1 :(得分:3)
linter规则,即“no-fallthrough”&#39;在所有情况下,不允许任何意外的堕落。
没有中断代码执行的含义将从匹配大小写继续到下一个大小写,除非遇到break,return等。
有时候我们确实需要这个,但是可能会发生无意的挫折,而这条规则试图阻止这种情况发生。
您可以禁用该规则或将其配置为警告。 我建议为返回值指定一个变量,并在函数结束时返回它而不禁用该规则。
window.Pulse =
Models: {}
Collections: {}
Routers: {}
Views: {}
init: ->
Pulse.mainRouter = new Pulse.Routers.MainRouter()
Backbone.history.start()
$ -> Pulse.init()
}
对于无法访问的部分,您将从if else块返回。
所以休息永远不会有机会执行。
答案 2 :(得分:0)
switch (action.type) {
case TYPES.ADD_TO_FAVORITES:
if (state.faves.length <= 10) {
return ...;
} else {
return ...;
}
break; // YOU HAVE ADDED BREAK HERE
default:
return state;
}
在case TYPES.ADD_TO_FAVORITES
内,if
或else
将被执行。正如在{和else
中都返回了一些对象一样,break
之前添加的default
将永远不会被执行!
这就是它说unreachable code
的原因。
答案 3 :(得分:-1)
返回
使无意义,不允许。您只能在功能中返回。如果你想从switch语句中获取值。只需将它分配给像这样的变量var result;
switch (action.type) {
case TYPES.ADD_TO_FAVORITES:
if (state.faves.length <= 10) {
result = assign({}, state, {
faves: state.faves.concat(action.payload),
full: false
});
} else {
result = assign({}, state, {
faves: state.faves,
full: true
});
}
break;
default:
result = state;
break;
}