Tek tip bir parametre ile F # içinde genel bir sınıf var ve fabrika yöntemleri içeren statik bir sınıf oluşturmak istiyorum. Sınıflarımı yazdığımda, F # derleyici "kapsamından kaçan bir tür değişkeni" ile ilgili bir hata üretir. Sorum şu: hata neden ve nasıl düzeltileceği. Ben tip Foo<'a>
fabrika yöntemleri çağırmak edebilmek istiyorum çünküTür değişkeni, jenerik ve jenerik olmayan sınıf birleştirirken kapsam dışına çıkmaktadır
type Foo<'a>(element : 'a) =
member this.Copy() = Bar.Create(element)
and Bar =
static member Create(element : 'a) = new Foo<'a>(element)
tiplerinde karşılıklı Yinelemesiz yoktur: Sorunu gösteren asgari boy pasajını oluşturduk
statik sınıf. Yukarıdaki kod parçacığı derlenmiyor ve hata şu şekildedir: "Tür çıkarımı, tür değişkeninin a, kapsamından çıkmasına neden oldu. Açık bir tip parametre bildirimi eklemeyi veya kodunuzu daha az genel olacak şekilde ayarlamayı düşünün." Hata, Bar
sınıfının Create
yönteminde bulunan olarak kaydedilir. Maalesef, sorunu gerçekten anlamıyorum ve nasıl düzelteceğimi bilmiyorum. Herhangi bir fikir?
İşte ek bir gözlem. Snippet
derlemez. Bu nedenle, sorun, Foo<'a>
sınıfının Copy()
yöntemine dayanarak yapılan tür çıkarsama ile ilgili görünmektedir. Bundan başka, söz konusu pasaj
type Foo<'a>(element : 'a) =
member this.Copy() = Bar.Create(element)
and Bar =
static member Create<'a>(element) = new Foo<'a>(element)
da hata ile, derleme değil (statik yöntem açıkça genel yapılır) kodu, bir daha fazla C# -benzeri versiyonu yeterli değil genel "Bu kod olmasıdır. tip değişkeni 'a, kapsamı dışında kalacağı için genelleştirilemezdi.'
Karşılıklı özyineleme türlerini körfezde tutmakla ilgili yorumda bulunuldu. –