Я не знаком с твердостью, но я использовал другие:
Рекурсивный значение по умолчанию для слияний неускоренной перемотки вперед. Мы все знакомы с тем.
я использовал разветвителя, когда у меня было несколько деревьев, которые должны были быть объединены. Вы видите это в больших проектах, где много ответвлений имели независимую разработку, и это все готово объединиться в единственную голову.
ответвление разветвителя объединяет многосекционные головки в одной фиксации, пока это может сделать это чисто.
Для иллюстрации, предположите, что у Вас есть проект, который имеет ведущее устройство, и затем три ответвления для слияния в (назовите их a, b, и c).
серия А рекурсивных слияний была бы похожа на это (обратите внимание, что первое слияние было ускоренной перемоткой вперед, поскольку я не вызвал рекурсию):
Однако единственное слияние разветвителя было бы похоже на это:
commit ae632e99ba0ccd0e9e06d09e8647659220d043b9
Merge: f51262e... c9ce629... aa0f25d...
Наш ==, который я хочу вытянуть в другой голове, но выбрасывать все изменения, которые представляет голова.
Это сохраняет историю ответвления без любого из эффектов ответвления.
(Read: на Это даже не смотрят изменения между теми ответвлениями. Ответвления просто объединяются, и ничто не сделано в файлы. Если Вы хотите объединиться в другом ответвлении и каждый раз, когда существует вопрос "наша версия файла или их версия", можно использовать git merge -X ours
)
, Поддерево полезно, когда Вы хотите объединиться в другом проекте в подкаталог Вашего текущего проекта. Полезный, когда у Вас есть библиотека, Вы не хотите включать как подмодуль.
ОБНОВЛЕНИЕ: Этот вопрос послужил источником вдохновения для моей статьи на эту тему. Спасибо за отличный вопрос!
«continue» и «break» - не более чем приятный синтаксис для «goto». Очевидно, давая им милые имена и ограничивая их использование определенными управляющими структурами, они больше не вызывают гнев толпы «все gotos все время плохие».
Если вы хотите, чтобы они продолжали- external, вы можете просто определить метку в верхней части внешнего цикла, а затем «перейти» к этой метке. Если вы считаете, что это не препятствует пониманию кода, то это может быть наиболее целесообразным решением.
Однако, Я бы воспользовался этим как возможностью подумать, выиграет ли ваш поток управления от некоторого рефакторинга. Каждый раз, когда у меня есть условные «break» и «continue» во вложенных циклах, я рассматриваю возможность рефакторинга.
Рассмотрим:
successfulCandidate = null;
foreach(var candidate in candidates)
{
foreach(var criterion in criteria)
{
if (!candidate.Meets(criterion)) // Edited.
{ // TODO: no point in continuing checking criteria.
// TODO: Somehow "continue" outer loop to check next candidate
}
}
successfulCandidate = candidate;
break;
}
if (successfulCandidate != null) // do something
Два метода рефакторинга:
Во-первых, извлечь внутренний цикл в метод:
foreach(var candidate in candidates)
{
if (MeetsCriteria(candidate, criteria))
{
successfulCandidate = candidate;
break;
}
}
Во-вторых, могут ли все циклы быть устранены? Если вы зацикливаетесь из-за того, что пытаетесь что-то найти, то преобразовайте это в запрос.
var results = from candidate in candidates
where criteria.All(criterion=>candidate.Meets(criterion))
select candidate;
var successfulCandidate = results.FirstOrDefault();
if (successfulCandidate != null)
{
do something with the candidate
}
Если нет циклов, то нет необходимости прерывать или продолжать!
можно все петли устранить? Если вы зацикливаетесь из-за того, что пытаетесь что-то найти, то преобразовайте это в запрос.var results = from candidate in candidates
where criteria.All(criterion=>candidate.Meets(criterion))
select candidate;
var successfulCandidate = results.FirstOrDefault();
if (successfulCandidate != null)
{
do something with the candidate
}
Если нет циклов, то нет необходимости прерывать или продолжать!
можно все петли устранить? Если вы зацикливаетесь из-за того, что пытаетесь что-то найти, то преобразовайте это в запрос.var results = from candidate in candidates
where criteria.All(criterion=>candidate.Meets(criterion))
select candidate;
var successfulCandidate = results.FirstOrDefault();
if (successfulCandidate != null)
{
do something with the candidate
}
Если нет циклов, то нет необходимости прерывать или продолжать!
while
{
// outer loop
while
{
// inner loop
try
{
throw;
}
catch
{
// how do I continue on the outer loop from here?
goto REPEAT;
}
}
// end of outer loop
REPEAT:
// some statement or ;
}
Проблема решена. (что ?? Почему вы все так на меня смотрите?)
You can use a break; statement.
while
{
while
{
try
{
throw;
}
catch
{
break;
}
}
}
Continue is used to jump back to the top of the current loop.
If you need to break out more levels than that you will either have to add some kind of 'if' or use the dreaded/not recommended 'goto'.
No.
I suggest, extracting the inner loop into a separate method.
while
{
// outer loop
try
{
myMethodWithWhileLoopThatThrowsException()
}
catch
{
// how do I continue on the outer loop from here?
continue;
}
}
}
You just want to break from the inner which would continue the outer.
while
{
// outer loop
while
{
// inner loop
try
{
throw;
}
catch
{
// how do I continue on the outer loop from here?
break;
}
}
}
Я думаю, что лучший способ добиться этого - использовать оператор break . Break завершает текущий цикл , а продолжает выполнение с того места, где оно заканчивается . В этом случае он завершит внутренний цикл , а вернется во внешний цикл while . Вот как будет выглядеть ваш код:
while
{
// outer loop
while
{
// inner loop
try
{
throw;
}
catch
{
// break jumps to outer loop, ends inner loop immediately.
break; //THIS IS THE BREAK
}
}
}
Я считаю, что это то, чего вы хотели достичь, верно? Спасибо!
Swap the try/catch structure with the inner while loop:
while {
try {
while {
throw;
}
}
catch {
continue;
}
}
Используйте собственный тип исключения, например MyException. Затем:
while
{
try {
// outer loop
while
{
// inner loop
try
{
throw;
}
catch
{
// how do I continue on the outer loop from here?
throw MyException;
}
}
} catch(MyException)
{ ; }
}
Это будет работать для продолжения и выхода из нескольких уровней вложенных операторов while. Извините за плохое форматирование;)
using System;
namespace Examples
{
public class Continue : Exception { }
public class Break : Exception { }
public class NestedLoop
{
static public void ContinueOnParentLoopLevel()
{
while(true)
try {
// outer loop
while(true)
{
// inner loop
try
{
throw new Exception("Bali mu mamata");
}
catch (Exception)
{
// how do I continue on the outer loop from here?
throw new Continue();
}
}
} catch (Continue) {
continue;
}
}
}
}
}