Boolean işlevini uygulamak için erişmekte olduğum bir Vektörler Vektörüm var. yani ben f tipi T => Boolean
taşımaktadır f(myVector(i)(j))
çizgisinde bir şey yürütmek için gidiyorumScala'da yuvalanmış Sekanslardaki sınırların varsayılan bir şekilde çıkarılması için basit bir yol var mı?
Vector[Vector[T]]
.
Ancak bu, sınır denetimi yapmıyor ve gerçekten zarif bir şey elde edemiyorum. myVector.applyOrElse(i, (_:Int) => Vector.empty).applyOrElse (j, (_:Int) => defaultT)
nerede f(defaultT)
false
döneceğini Ama ben sadece bir işlevi yerine bir varsayılan değer ayarlamak isterdim:
Ben applyOrElse
kullanabilirsiniz.
Bana bir Option
vermek için germe kullanabilirsiniz, ancak ikinci düzeyde iyi beste değildir: çalışır, ama yine de okumak gerçekten zor myVector.lift(i) map (_.lift(j) map f getOrElse false) getOrElse false
.
Ve sonra standart var/eğer başka bloklar:
if (myVector.size <= i) false
else {
val myVector2 = levelVector(i)
if (myVector2.size <= j) false
else f(myVector2(j))
}
Sadece ben neler başarabileceğini daha kolay ayrıştırılabilir mümkün olmalıdır şey gibi görünüyor. Ve eğer 3. katmanı eklerseniz, daha da çirkinleşir.
Başka seçenekler var mı?
Yasal Uyarı: Bu Coursera en progfun dersten uyarlanmıştır
Fantastic - Opsiyonu tutmaya çalışıyordum ama liste kavramasının temellerini unuttum. Teşekkürler. – Stephen
2.10 daha kısa versiyon: 'myVector.lift (i) .flatMap (_. Lift (j)) mevcut (f)' dir. – lpandzic