Neden't değişkenleri " olarak ilan edildi;dene" kapsamında "yakalamak" veya "nihayet" değil mi?
C# ve Java (ve muhtemelen diğer dillerde), değişken bir ilan "" blok karşılık gelen "" veya "nihayet" engeller. catch kapsamında değildir deneyin Örneğin, aşağıdaki kod derleme değil:
try {
String s = "test";
// (more code...)
}
catch {
Console.Out.WriteLine(s); //Java fans: think "System.out.println" here instead
}
Bu kod, bir derleme zamanı hatası sadece deneyin bloğu kapsamında s çünkü catch bloğu nın başvurusu üzerine oluşur. (Java, derleme hatası "çözümlenemeyen s"; C#, "adı 'geçerli bağlamda yok".)
Bu konuya genel bir çözüm yerine deneyin blok içinde sadece try bloğu önce yerine: değişkenleri bildirmek için gibi görünüyor
String s;
try {
s = "test";
// (more code...)
}
catch {
Console.Out.WriteLine(s); //Java fans: think "System.out.println" here instead
}
Ancak, en azından benim için, (1) Bu nasıl bir his, aksak bir çözüm, ve (2) sonuçları değişken olması daha büyük bir kapsam daha, programcının (tüm bakiye yöntemi yerine, sadece bağlamında try-catch-finally).
Benim sorum,/ne gerekçe(ler) bu dil tasarım kararı (C geçerli başka bir dilde# ve/veya Java) arkasında mı?
CEVAP
İki şey:
Genellikle, JavaScript kapsam sadece 2 seviyesi vardır: küresel ve işlevi. Ama,/try catch bir istisna (punn amaçlanan). Bir özel durum ve İstisna nesnesini bir değişkene atanmış geldiğinde, nesne değişkeni sadece "" bölüm ve yakalamak tamamlar tamamlamaz yok. yakalamak içinde kullanılabilir
(ve daha önemlisi). Try bloğu içinde özel durum nerede olduğunu bilemezsin. Sizin değişken ilan edildi önce olmuş olabilir. Bu nedenle imkansız değişkenler sonunda yan/yakalamak için kullanılabilir olacağını söyleyebilirim. Aşağıdaki durum düşünün, kapsam önerdiğin gibi olduğu:
try
{
throw new ArgumentException("some operation that throws an exception");
string s = "blah";
}
catch (e as ArgumentException)
{
Console.Out.WriteLine(s);
}
Bu açıkça bir sorundur - özel durum işleyici ulaştığınızda, ilan edilmiş s olur. Yakalar istisnai şartlar altında ve finallys idare etmek içindir verildigerekirgüvende olmak, yürütme ve derleme zamanında bu sorunu bildirmek zamanında çok daha iyi.
Neden't değişkenleri bir switch i...
Neden android en'değişkenleri m i...
Neden sadece son değişkenleri anonim s...
Neden yerel değişkenleri başlatma, ama...
Neden varsayılan arayüz değişkenleri s...