for (var count = 1; count < 6; count++) {
switch (count) {
case (2): document.write("hi"); break;
case (count > 3): document.write("bye"); break;
case (count >= 4): document.write("lol"); break;
}
}
Поскольку это не прокладывает себе путь, я ожидаю, не печатая до свидания и lol, это заставляет меня думать, что это недопустимо в JavaScript. Я пытался искать некоторые примеры, чтобы видеть, делают ли люди это на Google, и я не видел ни один. Таким образом, это допустимо или нет? или Почему это не могло бы работать?
При интерпретации switch
выражение в скобках сравнивается со значениями конкретных случаев.
Поэтому в вашем случае значение count
будет сравниваться со значениями 2
, count > 3
и count >= 4
. И это не сработает. Хотя вы можете переписать его и сравнить с true
, чтобы заставить его работать:
switch (true) {
case (count == 2):
document.write("hi");
break;
case (count > 3):
document.write("bye");
break;
case (count >= 4):
document.write("lol");
break;
}
Но это не то, как должен использоваться switch
.
Вместо этого используйте утверждения if
:
if (count == 2) {
document.write("hi");
} else if (count > 3) {
document.write("bye");
} else if (count >= 4) {
document.write("lol");
}
Edit Поскольку вы используете исключительно случаи switch
(прерывание при совпадении случая), мой перевод switch
-to-if
/else
правильный.
Но случай/ветвь count >= 4
никогда не будет применен, поскольку count > 3
истинно (также) для значений count
больших или равных 4.
Чтобы решить эту проблему (написать "bye" и "lol" для значений, больших или равных 4), удалите последний else
, чтобы сделать последнее if
утверждение независимым от предыдущего:
if (count == 2) {
document.write("hi");
} else if (count > 3) {
document.write("bye");
}
if (count >= 4) {
document.write("lol");
}
Попробуйте:
-clean
Такое длительное время запуска обычно является признаком какого-то тайм-аута, потому что ресурс (путь, адрес Интернета?) не отвечает.
-121--2975479-Прежде чем я отвечу на этот вопрос, я хочу быть очень ясным, что это хорошая идея только в таких случаях, когда ветви для слияния являются производственными ветвями, а не отраслями развития. Если вы нашли этот пост в поисках способа объединить ветви интеграции (master) во все ваши ветви темы (разработки), ответ, что вы почти наверняка не должны ( см. здесь ).
Хорошо, и реальный ответ. Там нет встроенного способа, потому что (предполагая, что это не быстрый вперед) вы действительно должны иметь файлы, проверенные на git, чтобы сделать его магию слияния. К счастью, на самом деле вы делаете не так много ( git checkout & & git merge
), поэтому не составит труда написать сценарий. Вы можете усложнить это с помощью конфигурационного файла или даже добавить некоторые пользовательские вещи в .git/config
(например, git config ветвь. < branchname > .productionbranch true
, а затем использовать команды git для проверки, какие ветви имеют этот флаг установлен), но самый простой способ будет следующим:
#!/bin/bash
production_branches=( branch1 branch2 branch3 )
for branch in ${production_branches[@]}; do
if ! ( git checkout $branch && git merge master ); then
exit
# Exit on the first error
# If you want to just plow ahead, do something like this:
# git reset --hard # make sure there aren't merge conflicts in the tree
# failed_merges="$failed_merges $branch" # remember for later
fi
done
# if you plowed ahead above, print the branches which failed to checkout+merge
# if [ -n "$failed_merges" ]; then
# echo "Failed merges: $failed_merges"
# fi
Есть, как всегда, много улучшений вы Например, можно использовать некоторые команды git, чтобы проверить, был ли мастер уже объединен в данную ветвь, и избежать его извлечения. Если вы двигаетесь по прошлым неудавшимся слияниям, вы можете сделать извлечение и слияние отдельно в случае, если это было извлечение, которое не удалось (это может означать грязное рабочее дерево, что означает, что они все потерпят неудачу). Надеюсь, этого достаточно, чтобы начать!
-121--3007004- Для переключателя
обычно требуется фиксированное условие/значение; поскольку ваша переменная count
изменяется каждый раз, она идет вразрез с этим. Вместо этого используйте условие if-else
.
Вы неправильно используете предложение case. Вы должны предоставить значение, которое будет сравниваться со значением в предложении switch ... а не логическое выражение, подобное этому count> 2
В этом случае это логическое выражение будет преобразовано в true или false (1 или 0) и по сравнению с вашим значением подсчитывается и иногда может работать, иногда - нет.
Вам следует подумать о замене его операторами if.
Это исправление к ответу Гамбо . Я пишу отдельный ответ только потому, что в качестве комментария он не подходит.
Править: Гамбо предположил в комментарии, что я, возможно, неправильно понял намерение Дуга. Если OP действительно хочет, чтобы и "bye", и "lol" были распечатаны для count> = 4, тогда нам нужно удалить break
из переключателя
. Теперь дела вернулись в исходный порядок, так что «пока» и «лол» печатаются в этом порядке (что, по-видимому, и является намерением ОП.)
switch (true) {
case (count == 2):
document.write("hi");
break;
case (count > 3):
document.write("bye");
// No break here; just fall through.
case (count >= 4):
document.write("lol");
break;
}
В этом случае я согласен с Гамбо в том, что исправленный если
утверждение верное.
Далее следует исходный ответ (предполагается, что OP действительно хотел либо «lol», либо «пока», но не то и другое вместе.)
Утверждение switch
, которое ] Гамбо написал не будет работать для count> = 4 по той же причине, что и оригинальный оператор Gumbo if
не будет работать: поскольку случаи оцениваются последовательно, count> = 4 подразумевает что второй случай (count> 3) будет выполнен; поэтому скрипт никогда не достигнет теста на count> = 4.Чтобы исправить это, тесты должны выполняться в обратном порядке, от самого высокого до самого низкого:
switch (true) {
case (count >= 4):
document.write("lol");
break;
case (count > 3):
document.write("bye");
break;
case (count == 2):
document.write("hi");
break;
}
Исправленный оператор if
также неверен, потому что для count> = 4 он даст оба пока
и lol
на выходе. Опять же, тесты в лестнице if
должны быть организованы таким образом, чтобы переходить от самых высоких значений к самым низким:
if (count >= 4) {
document.write("lol");
} else if (count > 3) {
document.write("bye");
} else if (count == 2) {
document.write("hi");
}
Это не идеальный пример, потому что если count
является целым числом, то оценка count> = 4
и count> 3
даст те же результаты - true
для count> = 4, false
в противном случае. Этого не будет, если count
является значением с плавающей запятой (но тогда значение с плавающей запятой с именем «count» вызовет другие проблемы).