Skip to content

Commit 8ac69ed

Browse files
abstraction fix to split: preserve vector nature of host return value #359
Signed-off-by: Stuart Halloway <[email protected]>
1 parent 2c9503a commit 8ac69ed

File tree

2 files changed

+12
-4
lines changed

2 files changed

+12
-4
lines changed

src/clj/clojure/string.clj

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,8 @@
1010
:author "Stuart Sierra"}
1111
clojure.string
1212
(:refer-clojure :exclude (replace reverse))
13-
(:import (java.util.regex Pattern)))
13+
(:import (java.util.regex Pattern)
14+
clojure.lang.LazilyPersistentVector))
1415

1516
(defn ^String reverse
1617
"Returns s with its characters reversed."
@@ -123,10 +124,12 @@
123124

124125
(defn split
125126
"Splits string on a regular expression. Optional argument limit is
126-
the maximum number of splits."
127+
the maximum number of splits. Not lazy. Returns vector of the splits."
127128
{:added "1.2"}
128-
([^Pattern re ^String s] (seq (.split re s)))
129-
([^Pattern re limit ^String s] (seq (.split re s limit))))
129+
([^String s ^Pattern re]
130+
(LazilyPersistentVector/createOwning (.split re s)))
131+
([ ^String s ^Pattern re limit]
132+
(LazilyPersistentVector/createOwning (.split re s limit))))
130133

131134
(defn ^String trim
132135
"Removes whitespace from both ends of string."

test/clojure/test_clojure/string.clj

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,11 @@
22
(:require [clojure.string :as s])
33
(:use clojure.test))
44

5+
(deftest t-split
6+
(is (= ["a" "b"] (s/split "a-b" #"-")))
7+
(is (= ["a" "b-c"] (s/split "a-b-c" #"-" 2)))
8+
(is (vector? (s/split "abc" #"-"))))
9+
510
(deftest t-reverse
611
(is (= "tab" (s/reverse "bat"))))
712

0 commit comments

Comments
 (0)