Почему не переменные, объявленные в "попробовать" сфера применения "поймать" или "наконец"?



в C# и Java (и, возможно, других языках) переменные, объявленные в блоке "try", не находятся в области действия в соответствующих блоках "catch" или "finally". Например, следующий код не компилируется:



try {
String s = "test";
// (more code...)
}
catch {
Console.Out.WriteLine(s); //Java fans: think "System.out.println" here instead
}


в этом коде ошибка времени компиляции возникает при ссылке на s в блоке catch, потому что s находится только в области действия в блоке try. (В Java ошибка компиляции "s не может быть решена"; в C# это " имя " s " не существует в текущем контекст.")



общее решение этой проблемы, по-видимому, заключается в объявлении переменных непосредственно перед блоком try, а не внутри блока try:



String s;
try {
s = "test";
// (more code...)
}
catch {
Console.Out.WriteLine(s); //Java fans: think "System.out.println" here instead
}




мой вопрос в том, что было / есть обоснование(ы) этого решения о разработке языка (на Java, на C# и/или на любых других применимых языках)?

550   0  

Comments

    Ничего не найдено.