This post originated from an RSS feed registered with Ruby Buzz
by Jay Fields.
Original Post: Clojure: Converting a Custom Collection to a Sequence
Feed Title: Jay Fields Thoughts
Feed URL: http://feeds.feedburner.com/jayfields/mjKQ
Feed Description: Blog about Ruby, Agile, Testing and other topics related to software development.
I've been doing a bit of clojure lately and I've often found myself looking to convert a custom collection to a sequence. Unfortunately, several custom collections from libraries that we use don't implement Iterable; therefore, I can't simply use the seq function to create a seq.
In Java it's common to simply use a for loop and a get method to iterate through custom collections that don't implement Iterable.
There are patterns for doing something similar in Clojure; however, I much prefer to work with Sequences and functions that operate on Sequences. Shane Harvie and I added the following snippet to our code to quickly convert a custom collection to a seq.
Our first version only worked with a custom collection that had a .size() method; however, the second collection we ran into used a .length() method, so we created the above macro that allows you to specify the (size|length|count|whatever) method.
The obj->seq function can be used similar to the following example.
(let [positions (obj->seq position-collection size)] ; do stuff with positions )
I'm fairly new to Clojure, so please feel free to provide recommendations and feedback.