SORU
18 EYLÜL 2008, PERŞEMBE


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
18 EYLÜL 2008, PERŞEMBE


İki şey:

  1. 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

  2. (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.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Benjamin Heckendorn

    Benjamin Hec

    4 Mayıs 2008
  • karneson

    karneson

    23 Temmuz 2006
  • Mark Halberstadt

    Mark Halbers

    19 ŞUBAT 2010