2013-04-26 26 views
48

Có cách nào không, chỉ sử dụng API thu thập Scala, để có được một tùy chọn trong danh sách khi cố gắng lấy một phần tử theo chỉ mục của nó?Cách nhận Tùy chọn từ chỉ mục trong Bộ sưu tập trong Scala?

Tôi đang tìm kiếm hàm tương đương với hàm này, có tồn tại không?

def optionalValue[T](l: List[T], index: Int) = { 
    if (l.size < (index+1)) None 
    else Some(l(index)) 
} 

Cảm ơn

Trả lời

104

Có, bạn có thể nâng bộ sưu tập của bạn đến một chức năng Int => Option[A]:

scala> List(1,2,3).lift 
res0: Int => Option[Int] = <function1> 

scala> List(1,2,3).lift(9) 
res1: Option[Int] = None 
+0

Nice! cảm ơn bạn! – Loic

+10

Tôi đã thấy 'thang máy 'cho rất nhiều cấu trúc dữ liệu trong Scala, lý do cơ bản đằng sau việc đặt tên (và trừu tượng) là gì? – kosii

+2

@kosii có thể hơi muộn với câu trả lời, nhưng trong trường hợp này "nâng" đề cập đến việc chuyển đổi từ một hàm một phần của kiểu 'Int => T' thành một hàm tổng của kiểu' Int => Option [T] '. Nó là một thuật ngữ khá phổ biến để biến đổi từ cái gì đó ít chung chung sang cái gì đó tổng quát hơn, hay nói cách khác, "thêm" một cấu trúc mới, ví dụ: chuyển đổi một đơn nguyên thành một biến áp đơn lẻ, hoặc chuyển đổi một hàm thành một đơn nguyên tự do. Tôi nghĩ rằng thuật ngữ này đến từ lý thuyết thể loại, nhưng tôi không thể tìm thấy bất kỳ tài liệu tham khảo xác định nào. –

Các vấn đề liên quan