Tôi thường gặp phải một mẫu hình vì vậy tôi đã tự hỏi liệu có phương pháp thuận tiện nào trong thư viện Scala cho nó hay không.Gọi lại một hàm cho đến khi nó trả về None
Để nó là hàm f: A => Option[B]
. Tôi muốn thực hiện cuộc gọi lặp lại đến f
bắt đầu bằng số bắt đầu x
, f(f(f(x).get).get...)
, cho đến f
trả về None
và giữ giá trị không phải là None
cuối cùng.
tôi đã viết một thực hiện cho việc này:
@tailrec
def recurrentCallUntilNone[B](f: B => Option[B], x: B): B = f(x) match {
case Some(y) => recurrentCallUntilNone(f, y)
case None => x
}
Đây có phải là đã thực hiện trong thư viện chuẩn?
Ví dụ sử dụng cho điều này có thể là danh sách (Dây kéo) giữ vị trí hiện tại. Bằng cách gọi next
, None
được trả về nếu không có yếu tố nào sau vị trí hiện tại hoặc Option
cho cùng một danh sách, nhưng với vị trí hiện tại tăng lên. Bằng cách sử dụng phương pháp trên, có thể xây dựng phương thức end
để tìm kiếm danh sách ở cuối.
Nó không có trong thư viện và bạn đang làm đúng cách. –
thêm '@ tailrec'! –
Đây gần như là một ['unfold'] (http://daily-scala.blogspot.co.at/2009/09/unfoldleft-and-right.html).Nhưng nó dường như không xảy ra trong bất kỳ libs nào. – phg