Im tìm cách mở rộng trình vòng lặp để tạo phương thức mới takeWhileInclusive
, hoạt động như takeWhile
nhưng bao gồm phần tử cuối cùng.Scala, mở rộng trình lặp số
Vấn đề của tôi là cách tốt nhất để mở rộng trình vòng lặp để trả về trình lặp mới mà tôi muốn được đánh giá lười biếng. Đến từ nền C# tôi sử dụng bình thường IEnumerable
và sử dụng từ khóa yield
, nhưng một tùy chọn như vậy dường như không tồn tại trong Scala.
ví dụ tôi có thể có
List(0,1,2,3,4,5,6,7).iterator.map(complex time consuming algorithm).takeWhileInclusive(_ < 6)
như vậy trong trường hợp này takeWhileInclusive
sẽ chỉ phải giải quyết các vị trên các giá trị cho đến khi tôi nhận được một kết quả lớn hơn 6, và nó sẽ bao gồm kết quả đầu tiên này
cho đến nay tôi có:
object ImplicitIterator {
implicit def extendIterator(i : Iterator[Any]) = new IteratorExtension(i)
}
class IteratorExtension[T <: Any](i : Iterator[T]) {
def takeWhileInclusive(predicate:(T) => Boolean) = ?
}
Bạn đã có một cái nhìn tại Luồng? –
Một luồng chắc chắn có thể phù hợp hơn ở đây trong trường hợp ví dụ, tuy nhiên tôi vẫn có cùng một vấn đề xung quanh cách tốt nhất để xây dựng phương thức mở rộng –
Ồ, 'takeWhileInclusive'. [Cũ takeTo'] của tôi (https://issues.scala-lang.org/browse/SI-2963) .... –