SORU
13 EYLÜL 2010, PAZARTESİ


Sorun anlayış C# dili şartnamede açıklandığı gibi tür kesmesi

C# language specificationtürü §7.5.2 Bölümünde kesmesi açıklar. Anlamadığım bir ayrıntı var. Aşağıdaki durum düşünün:

// declaration
void Method<T>(T obj, Func<string, T> func);

// call
Method("obj", s => (object) s);

Microsoft ve Mono C# derleyicileri doğru anlaması hem T = object ama özellikleri algoritma benim anlayış T = string verir ve sonra da başarısız. Anladığım şu:

İlk aşaması

  • Eğer Ei isimsiz bir fonksiyon ise, biraçık parametre tür kesmesi(§7.5.2.7) Ti için Eı yapılır

    harflerle veya lambda ifadesi açıkça parametre türleri vardır, çünkü hiçbir etkisi olmaz. Değil mi?

  • Eğer Ei değeri parametre o zaman U bir tür varsa yoksaalt sınır çıkarımolduğu için Ti U yaptı.

    ilk parametre harflerle statik türü bu T, sağ alt sınırları için string ekler yani 6**?

İkinci aşama

  • Tümsabitlenmemiştürü değişkenleri olan Xıbağlıdır(§7.5.2.5) herhangi bir Xj (§7.5.2.10) sabittir.

    Harflerle T sabitlenmemiş bir şey bağlı değil... T sabit olmalı, değil mi?

§7.5.2.11 Sabitleme

  • Aday türlerinin Aydınlatma Xı için sınırları içerisinde tüm türleri kümesi olarak başlar.

    Harflerle { string (alt sınır) }

  • Biz o zaman sırayla her Xi için bağlı inceleyin: [...] Xi her bir alt sınır U İçin U örtülü bir dönüşüm yok her türlü Aydınlatma aday kümesinden kaldırılır. [...]

    harflerle aday kümesinden bir şey, değil mi kaldırmaz?

  • Kalan aday Aydınlatma türleri arasında ise tüm diğer aday türleri için örtülü bir dönüşüm var, benzersiz bir tür bir V var, o zaman Xi V. sabittir

    Tek aday türü olduğundan, bu vacuously doğru, yani Xi string sabit sıkı bağlıdır. Değil mi?


Nerede yanlış mı gidiyorum?

CEVAP
13 EYLÜL 2010, PAZARTESİ


GÜNCELLEME: bu sabah eksik ve yanlış otobüse ilk araştırmam. İlk aşama şartname metni doğru. Uygulama doğru.

Spec olaylar ikinci aşamasında yanlış sipariş alıyor, bu yanlış. Çıktı türü çıkarımlar yapmak olduğunu belirterek olmalıyızönceBiz olmayan bağımlı parametreleri düzeltin.

Adamım, bu iş karmaşık. Hatırlayamadığım kadar çok kez spec bu bölüm yeniden yazıldı.

Önce bu sorunu gördüm, ve ben kesinlikle yanlış terim gibi değişiklikleri yansıtmak için hatırlama yapma "tip değişken" olduğunu her yerde değiştirilir "type parametresi". (Tür parametreleri anlamsız onları değişkenleri aramak için yapar ki, değişebilir olan depolama konumu değil.) Aynı zamanda sipariş yanlış olduğunu fark ettim sanırım. Oldu herhalde yanlışlıkla web spec eski bir sürümünü sevk edildi. Çok özür dilerim.

Mads ile spec uygulama maç için güncellendi almaya çalışacağım. İkinci aşama doğru ifade şöyle bir şey olsa daha iyi olur:

  • Eğer sabitlenmemiş tür parametreleri varsa yazın çıkarım başarılı olur.
  • Eğer bir veya daha fazla bağımsız değişken ile Eı varsa orada yoksa, ilgili parametre türü Ti gibi tip Ti ile duygusal zeka çıktı türü en az bir sabitlenmemiş içerir tür parametresi Xj ve tip Ti ile duygusal zeka giriş hiçbirinin herhangi sabitlenmemiş içerir tür parametresi Xj, sonra çıktı bir tür kesmesi Ti için bu tür Eı yapılır.

Ya da bir önceki adım aslında bir çıkarım yaptı, biz olmasın şimdi en az bir tip gibi: parametre düzeltme gerekir

  • Eğer parametreleri gibi Xi, bir veya daha fazla türü varsa orada Xi sabitlenmemiş, Xi sınırları olmayan boş bir dizi var, ve Herhangi bir Xi Xj bağlı değildir sonra her bir Xi sabittir. Eğer herhangi bir sabitleme işlemi başarısız tür kesmesi başarısız olur.
  • Eğer bir veya daha fazla tür parametreleri varsa orada yoksa, o Xi gibi Xi sabitlenmemiş, Xi sınırları olmayan boş bir dizi var, ve Xi bağlı en az bir tür parametresi Xj var sonra her bir Xi sabittir. Eğer herhangi bir sabitleme işlemi başarısız tür kesmesi başarısız olur.
  • Aksi takdirde, ilerleme mümkün değildir ve vardır sabitlenmemiş parametreleri. Tür kesmesi başarısız olur.

Eğer tür kesmesi ne başarısız ne de başarılı sonra ikinci aşama tekrarlanır.

Burada fikir algoritma hiçbir zaman sonsuz bir döngüye gider emin olmak istiyoruz. İkinci aşama, her tekrar sonunda da başarılı olur, başarısız olur, ya da ilerleme yapar. Döngü tipleri düzeltmek için tür parametreleri vardır kat daha büyük olasılıkla olamaz.

Beni bilgilendirdiğiniz için teşekkür ederim.

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

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Elly Awesome

    Elly Awesome

    15 ŞUBAT 2010
  • kylediablo

    kylediablo

    8 Ocak 2007
  • TechShowsYou

    TechShowsYou

    3 Mart 2011