about summary refs log tree commit diff
path: root/src/libcore
diff options
context:
space:
mode:
authorTim Chevalier <chevalier@alum.wellesley.edu>2012-03-08 15:24:27 -0800
committerTim Chevalier <chevalier@alum.wellesley.edu>2012-03-08 15:25:56 -0800
commit0c5fdc8745cd0bc5fbf9272301d3aafa2eb8f331 (patch)
tree9c41d534de15987872229a6e7a915a3be23cb3d3 /src/libcore
parent8047c0cd68baaee21ac89ac7d933bc84b7ebcf3e (diff)
downloadrust-0c5fdc8745cd0bc5fbf9272301d3aafa2eb8f331.tar.gz
rust-0c5fdc8745cd0bc5fbf9272301d3aafa2eb8f331.zip
Rename last to last_opt, last_unsafe to last
As per discussion on IRC. I am about to file an RFC for further
discussion about the more general issue of whether to enforce
invariants through types, typestate, or dynamic checks, but for now,
removing the misleading name "last_unsafe".
Diffstat (limited to 'src/libcore')
-rw-r--r--src/libcore/path.rs2
-rw-r--r--src/libcore/vec.rs29
2 files changed, 14 insertions, 17 deletions
diff --git a/src/libcore/path.rs b/src/libcore/path.rs
index 1cfafd25740..5658e57f68a 100644
--- a/src/libcore/path.rs
+++ b/src/libcore/path.rs
@@ -170,7 +170,7 @@ fn splitext(p: path) -> (str, str) {
         if vec::len(parts) > 1u {
             let base = str::connect(vec::init(parts), ".");
             // We just checked that parts is non-empty, so this is safe
-            let ext = "." + vec::last_unsafe(parts);
+            let ext = "." + vec::last(parts);
 
             fn is_dotfile(base: str) -> bool {
                 str::is_empty(base)
diff --git a/src/libcore/vec.rs b/src/libcore/vec.rs
index 3737f9bac1d..f1aac380886 100644
--- a/src/libcore/vec.rs
+++ b/src/libcore/vec.rs
@@ -187,27 +187,24 @@ fn init<T: copy>(v: [const T]) -> [T] {
 /*
 Function: last
 
-Returns the last element of a vector
-
-Returns:
+Returns the last element of a `v`, failing if the vector is empty.
 
-An option containing the last element of `v` if `v` is not empty, or
-none if `v` is empty.
 */
-pure fn last<T: copy>(v: [const T]) -> option<T> {
-    if len(v) == 0u { ret none; }
-    ret some(v[len(v) - 1u]);
+pure fn last<T: copy>(v: [const T]) -> T {
+    if len(v) == 0u { fail "last_unsafe: empty vector" }
+    v[len(v) - 1u]
 }
 
 /*
-Function: last_unsafe
+Function: last_opt
 
-Returns the last element of a `v`, failing if the vector is empty.
+Returns some(x) where `x` is the last element of a vector `v`,
+or none if the vector is empty.
 
 */
-pure fn last_unsafe<T: copy>(v: [const T]) -> T {
-    if len(v) == 0u { fail "last_unsafe: empty vector" }
-    v[len(v) - 1u]
+pure fn last_opt<T: copy>(v: [const T]) -> option<T> {
+    if len(v) == 0u { ret none; }
+    some(v[len(v) - 1u])
 }
 
 /*
@@ -1270,11 +1267,11 @@ mod tests {
 
     #[test]
     fn test_last() {
-        let n = last([]);
+        let n = last_opt([]);
         assert (n == none);
-        n = last([1, 2, 3]);
+        n = last_opt([1, 2, 3]);
         assert (n == some(3));
-        n = last([1, 2, 3, 4, 5]);
+        n = last_opt([1, 2, 3, 4, 5]);
         assert (n == some(5));
     }