Портативный .NET и МОНО различия

Я согласен, это больше похоже на 'elif not [условие (и), поднимающее разрыв]'.

Я знаю, что это старая ветка, но сейчас я изучаю тот же вопрос, и я не уверен, что кто-нибудь получил ответ на этот вопрос так, как я его понимаю.

Для меня есть три способа «чтения» else в For... else или While... else утверждениях, все из которых эквивалентны:

  1. else == if the loop completes normally (without a break or error)
  2. else == if the loop does not encounter a break
  3. else == else not (condition raising break) (предположительно, есть такое условие, иначе у вас не будет цикла )

Таким образом, по сути, «else» в цикле на самом деле является «elif ...» где «...» - это (1) без разрыва, что эквивалентно (2) НЕ [условие (и) подъема перерыва].

Я думаю, что ключ в том, что else бессмысленно без «разрыва», поэтому for...else включает в себя:

for:
    do stuff
    conditional break # implied by else
else not break:
    do more stuff

Итак, основные элементы цикла for...else таковы: и вы будете читать их на простом английском языке как:

for:
    do stuff
    condition:
        break
else: # read as "else not break" or "else not condition"
    do more stuff

Как говорили другие авторы, обычно возникает разрыв, когда вы можете найти то, что ищет ваша петля, поэтому else: становится «что делать, если целевой объект не найден».

Пример

Вы также можете использовать обработку исключений, разрывы и циклы для всех вместе.

for x in range(0,3):
    print("x: {}".format(x))
    if x == 2:
        try:
            raise AssertionError("ASSERTION ERROR: x is {}".format(x))
        except:
            print(AssertionError("ASSERTION ERROR: x is {}".format(x)))
            break
else:
    print("X loop complete without error")

Результат

x: 0
x: 1
x: 2
ASSERTION ERROR: x is 2
----------
# loop not completed (hit break), so else didn't run

Пример

Простой пример с ударом на разрыв.

for y in range(0,3):
    print("y: {}".format(y))
    if y == 2: # will be executed
        print("BREAK: y is {}\n----------".format(y))
        break
else: # not executed because break is hit
    print("y_loop completed without break----------\n")

Результат

y: 0
y: 1
y: 2
BREAK: y is 2
----------
# loop not completed (hit break), so else didn't run

Пример

Простой пример, где нет перерыва, нет условия, вызывающего перерыв, и нет встречаются ошибки.

for z in range(0,3):
     print("z: {}".format(z))
     if z == 4: # will not be executed
         print("BREAK: z is {}\n".format(y))
         break
     if z == 4: # will not be executed
         raise AssertionError("ASSERTION ERROR: x is {}".format(x))
else:
     print("z_loop complete without break or error\n----------\n")

Результат

z: 0
z: 1
z: 2
z_loop complete without break or error
----------
7
задан maxfridbe 1 July 2009 в 21:40
поделиться

3 ответа

Я думаю, что один из аспектов ответа - посмотреть на деятельность по проекту.

Вот Pnet: http://git.savannah.gnu.org/cgit/dotgnu-pnet/

Вот Mono's: https://github.com/mono/mono/commit

Кажется, что Pnet активизируется пару раз в неделю. Mono получает активность пару раз в час.

Последний выпуск Pnet - 0.8 от марта 2007 года, последний выпуск Mono - 2.4.2 на этой неделе.

Что касается разногласий, если есть патенты, которые собираются торпедировать Mono , они будут одинаково применяться к Pnet.

11
ответ дан 6 December 2019 в 10:02
поделиться

Mono более широко используется, реализует больше BCL и поддерживается крупными Linux-компаниями, такими как Novell.

На практике я считаю, что поддержка Mono System.Windows.Forms намного лучше.

4
ответ дан 6 December 2019 в 10:02
поделиться

Убеждение FSF в том, что Microsoft собирается заставить другие реализации подполья, немного странно, учитывая, что теперь это открытый стандарт:

    ECMA-334: C# Language Specification
    ECMA-335: Common Language Infrastructure
    etc, etc, etc..

В любом случае, Mono, безусловно, более зрелый, чем Portable .NET .

2
ответ дан 6 December 2019 в 10:02
поделиться
Другие вопросы по тегам:

Похожие вопросы: