2012-09-15 37 views
6

Theo Scala documentation cho phương thức Range.end, nó trả về "kết thúc độc quyền của dải ô". Vậy tại sao nó trả về cùng một giá trị cho cả hai ký tự tountil? Ví dụ:Độc quyền kết thúc trong phạm vi Phạm vi của Scala

Welcome to Scala version 2.9.2 (Java HotSpot(TM) Server VM, Java 1.7.0). 
Type in expressions to have them evaluated. 
Type :help for more information. 

scala> (1 to 10).end 
res0: Int = 10 

scala> (1 until 10).end 
res1: Int = 10 

Không nên res0 == 11?

+1

['RichInt.to'] (http://www.scala-lang.org/api/current/scala/runtime/RichInt.html) không kết quả chỉ là' Phạm vi', kết quả trong một ['Bao gồm'] (http://www.scala-lang.org/api/current/scala/collection/immutable/Range$$Inclusive.html). – oldrinb

+2

Tôi chưa bao giờ nghe nói về 'end' trước đây, nhưng nếu bạn muốn phần tử cuối cùng, hãy sử dụng' last'. Tài liệu của Scala đôi khi không phải là tốt nhất. –

Trả lời

12

tountil kết quả có liên quan nhưng khác nhau Range các lớp: Range.InclusiveRange, tương ứng; Range.Inclusive IS-A Range.

  • isInclusive sẽ phân biệt giữa hai loại lớp.

  • end hoặc giới hạn trên, được diễn giải trong ngữ cảnh của phạm vi là độc quyền hoặc bao gồm. Giới hạn trên là số thứ hai được cung cấp trong đặc tả phạm vi, là 10 trong cả hai trường hợp mẫu trong câu hỏi ban đầu. Và vâng, "giới hạn trên" này có thể nhỏ hơn "giới hạn dưới", nếu phạm vi từ cao đến thấp (tức là 1 until -10).

  • last sẽ trả về giá trị cuối cùng trong phạm vi, có thể là những gì bạn đang cố lấy từ end.

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