Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with
or
.
Download ZIP
Tree: 7038ffb563
Fetching contributors…

Cannot retrieve contributors at this time

95 lines (74 sloc) 2.745 kB

clojure.options

This library provides improved handling for Clojure functions with optional parameters. The library provides the macro defn+opts which defines a function with optional parameters. The syntax is similar to the one of Clojure's defn except that only one function body is allowed.

A documentation string for optional parameters is supported. When a defn+opts function f calls another defn+opts function g and passes its options symbol then the docstring of f will contain information about the optional parameters that can be passed to g.

Install

Add the following to your project.clj to let Leiningen install clojure.options for you:

:dependencies [[clojure.options 0.2.3]]

Usage

The following example shows the basic syntax for a function definition with the optional parameter base with default value 10.

(defn+opts int->str
  "Converts a given positive integer into a string.
  <base>The base to use for string encoding (<= 10).</base>
  "
  [x | {base 10}]
  (loop [x x, digits (list)]
    (if (pos? x)
      (recur (quot x base) (conj digits (mod x base)))
      (apply str digits))))

A call to that function looks like:

(int->str 23 :base 2)
;=> "10111"
(int->str 23)
;=> "23"

The documentation for int->str looks like

(doc int->str)
;-------------------------
;clojure.options/int->str
;([x & options])
;  Converts a given positive integer into a string.
;
;  The following options can be specified:
;    :base  The base to use for string encoding (<= 10).  [default = 10]
;=> nil

The main goal of this library is illustrated with the following function definition:

(defn+opts convert-ints
  "Converts all integers in a string to another base."
  [s | :as options]
  (clojure.string/replace s #"\d+" #(-> % Integer/parseInt (int->str options))))

The function convert-ints uses int->str to convert all integers of a given string. Therefore, it forwards the specified options in the convert-ints call to the int->str function.

(convert-ints "There are 2 types of people ..." :base 2)
;=> "There are 10 types of people ..."

The documentation of convert-ints looks like:

(doc convert-ints)
;-------------------------
;clojure.options/convert-ints
;([s & options])
;  Converts all integers in a string to another base.
;
;  The following options can be specified:
;
;    Passed to function clojure.options/int->str:
;      :base  The base to use for string encoding (<= 10).  [default = 10]
;=> nil

License

Copyright © 2012 Gunnar Völkel

Distributed under the Eclipse Public License, the same as Clojure.

Jump to Line
Something went wrong with that request. Please try again.