Великолепные ответы:
Моя заметка здесь взята из того, что однажды сказал Дональд Кнут (извините, не могу найти ссылку), что существует конструкция, в которой while-else неотличима от if-else, а именно (в Python):
x = 2
while x > 3:
print("foo")
break
else:
print("boo")
имеет тот же поток (исключая различия низкого уровня) как:
x = 2
if x > 3:
print("foo")
else:
print("boo")
Дело в том, что if-else может рассматриваться как синтаксический сахар для while-else, который имеет неявный break
в конец его if
блока. Противоположный вывод, что цикл while
является расширением до if
, более распространен (это просто повторная / циклическая условная проверка), потому что if
часто преподается раньше while
. Однако это не так, потому что это будет означать, что блок else
в while-else будет выполняться каждый раз , когда условие ложно.
Чтобы облегчить ваше понимание, подумайте об этом так:
Без
break
,return
и т. Д. Цикл заканчивается только тогда, когда условие больше не выполняется, и в таком случаеelse
Блок также будет выполнен один раз. В случае Pythonfor
вы должны рассмотреть циклы в стиле Cfor
(с условиями) или перевести их вwhile
.
Еще одно примечание:
Преждевременное
break
,return
и т. Д. Внутри цикла делает невозможным для условия стать ложным, потому что выполнение выпрыгнуло из цикла, в то время как условие было истинным и он никогда не вернется, чтобы проверить это снова.
На самом деле для этих случаев существует Exec Maven Plugin .
Не изначально.
Однако, используя плагин AntRun , вы можете указать задачу Ant (используя Exec ), которая запускает ОС команда во время сборки.
<project>
...
<build>
<plugins>
<plugin>
<artifactId>maven-antrun-plugin</artifactId>
<executions>
<execution>
<phase> <!-- a lifecycle phase --> </phase>
<configuration>
<tasks>
<!--
Place any Ant task here. You can add anything
you can add between <target> and </target> in a
build.xml.
-->
</tasks>
</configuration>
<goals>
<goal>run</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
...
</project>