From 8ac69ede24a0c481f312008dbca8bee2bc6e1e73 Mon Sep 17 00:00:00 2001 From: Stuart Halloway Date: Sun, 30 May 2010 13:53:36 -0400 Subject: [PATCH] abstraction fix to split: preserve vector nature of host return value #359 Signed-off-by: Stuart Halloway --- src/clj/clojure/string.clj | 11 +++++++---- test/clojure/test_clojure/string.clj | 5 +++++ 2 files changed, 12 insertions(+), 4 deletions(-) diff --git a/src/clj/clojure/string.clj b/src/clj/clojure/string.clj index e1ef379671..a4e774159a 100644 --- a/src/clj/clojure/string.clj +++ b/src/clj/clojure/string.clj @@ -10,7 +10,8 @@ :author "Stuart Sierra"} clojure.string (:refer-clojure :exclude (replace reverse)) - (:import (java.util.regex Pattern))) + (:import (java.util.regex Pattern) + clojure.lang.LazilyPersistentVector)) (defn ^String reverse "Returns s with its characters reversed." @@ -123,10 +124,12 @@ (defn split "Splits string on a regular expression. Optional argument limit is - the maximum number of splits." + the maximum number of splits. Not lazy. Returns vector of the splits." {:added "1.2"} - ([^Pattern re ^String s] (seq (.split re s))) - ([^Pattern re limit ^String s] (seq (.split re s limit)))) + ([^String s ^Pattern re] + (LazilyPersistentVector/createOwning (.split re s))) + ([ ^String s ^Pattern re limit] + (LazilyPersistentVector/createOwning (.split re s limit)))) (defn ^String trim "Removes whitespace from both ends of string." diff --git a/test/clojure/test_clojure/string.clj b/test/clojure/test_clojure/string.clj index 8ee7cdeee8..d1996c7cbb 100644 --- a/test/clojure/test_clojure/string.clj +++ b/test/clojure/test_clojure/string.clj @@ -2,6 +2,11 @@ (:require [clojure.string :as s]) (:use clojure.test)) +(deftest t-split + (is (= ["a" "b"] (s/split "a-b" #"-"))) + (is (= ["a" "b-c"] (s/split "a-b-c" #"-" 2))) + (is (vector? (s/split "abc" #"-")))) + (deftest t-reverse (is (= "tab" (s/reverse "bat"))))