возврат ест исключение

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

options: [
        { key: 'f', label: 'Fishing', selected:false },
        { key: 'c', label: 'Cooking', selected:true}
      ]

и связать это свойство selected, используя ngModel


Обновление 1: На основе стекаблиц

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

{{option.label}}

changeData Функция

changeData(currentOption,allOptions){
    console.log(currentOption);
    console.log('All options changed with ngModel',allOptions)
}

Примечание. Я использовал функцию ngModelChange, встроенную в click, чтобы увидеть изменения

Рабочий Штакблиц

26
задан SilentGhost 21 July 2010 в 15:11
поделиться

4 ответа

Вы спросили об обосновании разработчиков Python. Я не могу говорить за них, но никакое другое поведение не имеет смысл. Функция может или возвратить значение, или она может повысить исключение; это не может сделать обоих. Цель "наконец" пункт должен предоставить код очистки, который, как "гарантируют", будет выполнен, независимо от исключений. Вставляя оператор возврата наконец пункт, Вы объявили, что хотите возвратить значение, независимо от того, что, независимо от исключений. Если бы Python вел себя, как Вы просите и повысили исключение, он нарушал бы условия контракта "наконец" пункт (потому что ему не удалось бы возвратить значение, которое Вы сказали ему возвращать).

35
ответ дан Carl Meyer 28 November 2019 в 06:08
поделиться

исключение исчезает, когда Вы используете return внутренняя часть finally пункт... Это документируется где-нибудь?

Это:

, Если наконец присутствует, это указывает ‘cleanup’ обработчик. Пункт попытки выполняется, включая любого кроме и выражения else. Если исключение происходит в каком-либо из пунктов и не обработано, исключение временно сохраняется. Наконец пункт выполняется. Если существует сохраненное исключение, оно повторно повышено в конце наконец пункт. , Если наконец пункт повышает другое исключение или выполняет оператор возврата или оператор завершения, сохраненное исключение потеряно.

53
ответ дан culix 28 November 2019 в 06:08
поделиться

Вот интересное сравнение для возврата в наконец блоке, среди - Java/C#/Python/JavaScript: ( ссылка архива )

Возврат От Наконец

Как раз сегодня я помогал с некоторой ошибкой в Java и столкнулся с интересной проблемой - что происходит, если Вы используете возврат в операторе попытки/выгоды? Должен наконец, раздел разжигает или нет? Я упростил проблему до следующего фрагмента кода:

, Что выполнение до конца кодирует печать?

class ReturnFromFinally {  
 public static int a() {  
  try {  
   return 1;  
  }  
  catch (Exception e) {}  
  finally{  
   return 2;  
  }  
 }  

        public static void main(String[] args) {  
  System.out.println(a());  
        }  
}  

Мое исходное предположение было бы, который оно должно распечатать 1, я звоню return, таким образом, я принимаю, каждый будет возвращен. Однако это не имеет место:

the second return is executed

я понимаю логику, наконец разделяю, должен быть выполнен, но так или иначе я чувствую себя неловко об этом. Давайте посмотрим то, что C# делает в этом случае:

class ReturnFromFinally  
{  
 public static int a()  
 {  
  try {  
          return 1;  
  }  
  catch (System.Exception e) {}  
  finally   
  {   
   return 2;  
  }  
 }  

 public static void Main(string[] args)  
 {  
  System.Console.WriteLine(a());  
 }  
}  

error CS0157 Control cannot leave the body of a finally clause

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

Python:

def a():  
 try:  
  return 1  
 finally:  
  return 2  
print a()  

Python returns 2 as well

JavaScript:

<script>  
function ReturnFromFinally()  
{  
 try  
 {  
  return 1;  
 }  
 catch (e)  
 {  
 }  
 finally  
 {  
  return 2;  
 }  
}  
</script>  
<a onclick="alert(ReturnFromFinally());">Click here</a>  

JavaScript returns 2 as well

существует не наконец пункт в C++ и PHP, таким образом, я не могу испытать последние два языка, у меня есть компилятор/интерпретатор для.

Наш небольшой эксперимент приятно показал, что C# имеет самый хороший подход к этой проблеме, но я был вполне удивлен учиться, что все другие языки решают проблему тот же путь.

4
ответ дан Motti 28 November 2019 в 06:08
поделиться

Возврат из наконец не хорошая идея. Я знаю, что C# конкретно запрещает выполнение этого.

3
ответ дан Max Schmeling 28 November 2019 в 06:08
поделиться
Другие вопросы по тегам:

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