Soruma ilişkin bir sorun var - Functions with generic parameter types - ama ne istersem onu halledemiyorum.F #: Aşırı yükleme işlevleri
Ben tanımlamak istediğiniz yüzden gibi çeşitli C# sınıfları üzerinde Torunları ' 'kökenini çağrısı sarmak için işlev':
soyundan adı (XDocument: XDocument) let = xDocument.Descendants
kökenini izin
isim name (xElement: XElement) = xElement.Descendants nameBu yaklaşım işe yaramıyor, çünkü 'torunlar' yinelenen bir tanımımız var.
ben yerine bunu yapmak için satır içi işlevi faydalanmak ve statik olarak aşağıdaki yöntemi tanımlamak için parametreleri çözmek mümkün olacağını düşündüm:
let inline descendants name (xml : ^x when ^x : (member Descendants : XName -> seq<XElement>)) =
xml.Descendants name
Ama bunu yapmaya çalışıyor bu hatayı alıyorum : Bu program noktasından önceki bilgilere dayanarak belirsiz türdeki nesneye bakın. Nesnenin türünü kısıtlamak için bu program noktasından önce bir tip açıklama gerekebilir. Bu, aramanın çözülmesine izin verebilir.
İstediğimi yapmak için ikinci işlevi yazmamın bir yolu var mı?
Ah Aslında aşırı yüklemenin aslında üyeler için çalıştığını fark etmedim, açıkça diğer gönderiyi yeterince okumamıştı! Ayrıca, her ikisi de XContainer'dan miras aldıklarını anlayamadılar, bu çok daha iyi bir çözümdür. –
Aslında normal aşırı yüklemeyi denedim ve derleyici, "Descendants" olarak adlandırılan 2 üyenin aynı sayıda argümanla birlikte olduğunu söyler –
Bazılarında sürümleri, F # derleyicisi gereklidir '[]' aşırı yükleme yaparken kullanılacak, ancak hangi sürümde kaldırıldığından emin değilim ... F # RC'de daha basit bir örnek çalıştım (iki yöntem , her iki argüman ile) ve iyi çalıştı (OverloadID' olmadan). –