Yani, birden çok tanım (işlev) içeren bir işlev var ve eşleştiğine bağlı olarak, (a, b) veya (a, b)], ancak derleyici hataları atıyor çünkü onlar farklı tipler. Bunu çözmek için her ikisini de kullanmaya çalışıyordum, ama muhtemelen doğru kullanmadı: P. herhangi bir yardım?Farklı türlerde dönmek için bir işlev nasıl kullanılır
cevap
Either
sadece: Burada kullanarak ancak nasıl yanlış gittiğini emin değilim
basit onun kullanım örneğidir Bunu yapmanın yolu. içinde, Ancak
foo n = case stuff n of
Left (a,b) -> ...
Right pairs -> ...
, sorun hakkında hiçbir şey bilmeden: Biri bu fonksiyonu çağırdığında
stuff :: Int -> Either (Int,Int) [(Int,Int)]
stuff 0 = Left (0, 0)
stuff n = Right [ (x,x) | x <- [0..n] ]
Sonra onlar desen maç öğrenmek için iki türde de döndürdü: Burada aptal örnek Genel Fonksiyonunuzun anlamı hakkında biraz daha düşünmeyi öneririm. Ne alıyor, ne geri geliyor? Kesin, matematiksel ol. Cevabınız ne kadar basit olursa, bu işlev sizin programınızın geri kalanı ve Haskell konseptleri ile daha sorunsuz çalışır. Benim için, bu açıklamalarda Either
nadiren ortaya çıkıyor. İki sonucu nasıl birleştirebilirsin? Belki de işleviniz için anlamlıysa, Left (a,b)
yerine [(a,b)]
tekil listeyi döndürürsünüz.
Haskell, Python veya jQuery'den kullanabileceğiniz türden çok akıllı olmaya çalışan işlevlerle iyi çalışmıyor. Aptal ve hassas tutun - bu basit parçalardan oluşan 'dan karmaşıklığınızı alın. Bunu merak ediyorsanız, sorununuz hakkında daha fazla ayrıntı, neyi başarmaya çalıştığınız ve neden bu şekilde çalışmasını istediğinizle ilgili başka bir soru sorun. Vaaz verdiğim için özür dilerim
Bu tür sistemin istediğimiz özelliğin * koruma * olduğunu da ekleyeyim: "stuff :: Int -> (Int, Int)" '' şeyler 7'ye bir çağrı demek diyelim ki [[x, x] | x <- [0..n] 'türünde [[(Int, Int)] türüne sahip olan örnekte. Bu, "stuff" ibaresinin geri dönüş türünden farklıdır ve dolayısıyla tür korunmaz.Herhangi bir şey için sisteme güvenirsek, bu tutarsızlık kararlaştırılmalıdır. Bu nedenle, tip denetleyicisi programımızı yanlış yazılmış olarak reddeder. –
Haskell'deki işlevler yalnızca bir tür döndürür, bu nedenle işleviniz türünüzü döndüreceği için her ikisi de işe yarayacaktır (a, b) [(a.b)]. veya ona özel bir veri türü eşdeğer - -
test a b =
if a == True
then Left (a,b)
else Right [(a,b)]
şimdi fonksiyonum şu: http://paste.pocoo.org/show/325090/ İşte hata: http: //paste.pocoo. org/show/325093/ –
@Chris 'Right lgst i 'Right (lgst i)' olmalıdır. – dave4420
Tamam, http://paste.pocoo.org/show/325143/ çalışır, ancak ikinci iki gardiyanın bana http: //paste.pocoo.org/show/325144/ gibi bir şeye bakması gerekir: http://paste.pocoo.org/show/325145/ –
- 1. Farklı türlerde Get/Set
- 2. Bir işlev için "kullanma" nasıl kullanılır?
- 3. Farklı türlerde eksik değerleri (NA) belirtme
- 4. Farklı işlevlere sahip bir işlev nasıl tetiklenir
- 5. Apache shiro'daki farklı roller için farklı yetkisiz URL'ler nasıl kullanılır?
- 6. Android: Nasıl farklı android sürümleri için farklı temalar kullanılır?
- 7. R'de, bir işlev argümanı için "null" varsayılan değeri nasıl kullanılır?
- 8. RVM: Farklı bir yakuttan taşlar nasıl kullanılır?
- 9. Sıra farklı işlevde nasıl kullanılır?
- 10. Durumum kaç işlev çağrısı için kullanılır?
- 11. dönmek nasıl JSON nesnesi
- 12. SqlDependency ve SignalR, C# içindeki bir işlev kullanılarak 2 farklı veritabanında nasıl kullanılır?
- 13. İsteğe bağlı [Zorunlu] karmaşık türlerde
- 14. Nasıl Protobuf hizmet rpc bir dizi dönmek
- 15. Varargin (...) kullanırken farklı işlev kullanımı nasıl gösterilir?
- 16. sınıfının adı, bir işlev için
- 17. Bu iki üst düzey işlev nasıl farklı?
- 18. Tamamlanmamış türlerde grafik/ağaç uygulaması
- 19. Farklı Linux dağıtımlarında farklı başlık dosyalarının konumu nasıl kullanılır?
- 20. cakephp'de toplu işlev SUM nasıl kullanılır?
- 21. Parametre verilen türlerde Scala yansıması
- 22. Farklı düzenler için aynı RecyclerView Bağdaştırıcısı nasıl kullanılır?
- 23. Farklı etki alanlarındaki dizinleri kopyalamak için robocopy nasıl kullanılır?
- 24. Farklı Dosya ve Montaj sürümlerini belirtmek için tlbimp nasıl kullanılır?
- 25. İki devise modeli için farklı authentication_keys nasıl kullanılır?
- 26. Farklı ekran genişlikleri için jqgrid donmuş sütun nasıl kullanılır?
- 27. Oyun çerçevesindeki ebebaz SqlLimiter için farklı uygulama nasıl kullanılır?
- 28. JPA, Farklı sınıfları eşlemek için aynı sınıf (varlık) nasıl kullanılır?
- 29. Zend db modelinde 'farklı' nasıl kullanılır?
- 30. Google GeoChart ile farklı renkler nasıl kullanılır?
Bunu doğrudan yapamazsınız çünkü işlevlerin geri dönüş tipi derleme zamanında bilinmelidir, korumalar çalışma zamanında eşleştirilir. Ama gerçekten farklı bir tür döndürmek istediğinize emin misiniz? İki vakayı ayırt etmek için sonuçta desen eşlemeyi düşünüyorsanız, Ya iyi. Ya da belki ilk durumda tek bir liste yapacak? Ne yapacağın hakkında daha fazla bilgi verebilir misin? – b0fh
http://paste.pocoo.org/show/325066/ şu ana kadar –
işlevimdir ve bu bir büyü büyüsü okumak gibidir. Bunun anlamı ne? – luqui