Scala'yı öğreniyorum ve halihazırda mevcut bilgi seviyem için monad kavramının biraz fazla karmaşık olduğunu bulmak zorundaydım. Ancak, amacım en azından for
ifadesi ve ek olarak bir filtre ile kullanılabilecek çok basit bir sınıf yapmaktır. anlayış benim açımdanScala: Basit bir özel tipte harita ve withFilter uygulaması
aşağıdaki kurallar geçerlidir:
özel türü için sipariş (jeneratör yalnızca basit değişkenleri üretir) ifadesi için bir jeneratörü kullanılabilir olması için ise- , bu ihtiyacı
map
uygulayın. - Ek olarak filtreler kullanılmalıysa, o zaman yazım
withFilter
'u da uygulamalıdır.
Benim asgari sınıflar şuna benzer: Ancak
for(f <- grid) yield f.name // needs map
for(f <- grid; if f.isVisisble) yield f.name // needs map + withFilter
, beraber örnekler bulmakta zorlanırsanız var: Ben başarmak istiyorum ne
class Grid(private val fields: IndexedSeq[Field])
class Field(val name: String, val isVisible: Boolean)
aşağıdaki yapabilmek olduğunu bu tarz bir sadelik. Çözüm, herhangi bir sınıfa uygulanabilecek genel bir çözüm olmak yerine yukarıda gösterilen iki sınıfa "uyarlanmış" olsaydı sorun olmaz. Bu basit örnek için uygulamanın tersine çevrilmesi kesinlikle bana yardımcı olacaktır. Herhangi bir yardım takdir, teşekkür ederim.
Düzenleme: Lee belirttiği gibi
, benim amacım sadece jenerik türleri için çalışmıyor gibi görünüyor. Sadece sarılı koleksiyona fields
üzerine map
çağrıyı geçebilir
class Grid[E](private val fields: IndexedSeq[E])
'map' ve' withFilter ', yalnızca' Izgara 've' Alan 'olmayan genel türler için anlamlıdır. Örneğin (f <- grid) için f.name işlevi nasıl çalışır? – Lee
@Lee Cevabınız için teşekkürler, bunun hakkında düşünmek zorundasınız. Düzenlemem bir şeyi değiştiriyor mu? – ceran