Create a gist now

Instantly share code, notes, and snippets.

What would you like to do?
Clojure ns syntax cheat-sheet
;;
;; NS CHEATSHEET
;;
;; * :require makes functions available with a namespace prefix
;; and optionally can refer functions to the current ns.
;;
;; * :import refers Java classes to the current namespace.
;;
;; * :refer-clojure affects availability of built-in (clojure.core)
;; functions.
;;
;; Updated: 12/09/2016 ~ghoseb
(ns foo.bar
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; Refers clojure.string into current NS, e.g.:
;; (clojure.string/lower-case "FooBar)
(:require [clojure.string])
;; Refers string into current NS, e.g.:
;; (string/lower-case "FooBar")
(:require [clojure.string :as string])
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; Refers all functions from clojure.string and
;; clojure.set into current NS, e.g.:
;; (union #{:a :b} #{:a :c} #{:b :d})
;; (lower-case "FooBar")
(:require [clojure.string :refer :all]
[clojure.set :refer :all])
;; Refers only lower-case and union into current NS, e.g.:
;; (union #{:a :b} #{:a :c} #{:b :d})
;; (lower-case "FooBar")
(:require [clojure.string :refer [lower-case]]
[clojure.set :refer [union]])
;; Refers ancestors & descendants into current NS as xml-ancestors & xml-descendants
(:require clojure.data.zip)
(:refer [clojure.data.zip :rename {ancestors xml-ancestors,
descendants xml-descendants}])
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; Refers ArrayList and HashMap into current NS:
(:import [java.util ArrayList HashMap])
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; Excludes built-in print
(:refer-clojure :exclude [print])
;; Excludes all built-ins except print
(:refer-clojure :only [print])
;; Renames built-in print to core-print
(:refer-clojure :rename {print core-print})
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; Reload all dependencies while loading the ns
(:require [clojure.string :as cs :refer [split join]] :reload)
;; Be verbose about loading the deps
(:require [clojure.string :as cs :refer [split join]] :verbose)
;; There is also :reload-all that reloads every depenency in the ns
(:require [clojure.string :refer [split join]] :reload-all)
;; Everything together
(:require [clojure.string :as cs :refer [split join]] :verbose :reload))
@leontalbot

This comment has been minimized.

Show comment Hide comment
@leontalbot

leontalbot Jun 30, 2013

What is the meaning of :refer in the following :
(:require [io.pedestal.service.http.route.definition :refer [defroutes]]

thanks!

What is the meaning of :refer in the following :
(:require [io.pedestal.service.http.route.definition :refer [defroutes]]

thanks!

@leontalbot

This comment has been minimized.

Show comment Hide comment
@leontalbot

leontalbot Jun 30, 2013

Hmm. On "what means (:require [io.pedestal.service.http.route.definition :refer [defroutes]]) ", I got two hypotheses :

  1. (:require [io.pedestal.service.http.route.definition])
    (:use [io.pedestal.service.http.route.definition :only [defroutes]])
  2. (:use [io.pedestal.service.http.route.definition :only [defroutes]])

Don't know which would be right :/ if any ;)

Hmm. On "what means (:require [io.pedestal.service.http.route.definition :refer [defroutes]]) ", I got two hypotheses :

  1. (:require [io.pedestal.service.http.route.definition])
    (:use [io.pedestal.service.http.route.definition :only [defroutes]])
  2. (:use [io.pedestal.service.http.route.definition :only [defroutes]])

Don't know which would be right :/ if any ;)

@leontalbot

This comment has been minimized.

Show comment Hide comment
@leontalbot

leontalbot Jun 30, 2013

I think I got it.

On the pedestal tutorial, http://pedestal.io/documentation/connecting-to-datomic/
I found :
(:require [datomic.api :as d :refer (q)]))

where we get access to every function by prefixing d/ in front of it. Except for the q function that we can access directly, thanks to :refer.

:)

I think I got it.

On the pedestal tutorial, http://pedestal.io/documentation/connecting-to-datomic/
I found :
(:require [datomic.api :as d :refer (q)]))

where we get access to every function by prefixing d/ in front of it. Except for the q function that we can access directly, thanks to :refer.

:)

@cmpitg

This comment has been minimized.

Show comment Hide comment
@cmpitg

cmpitg Apr 24, 2014

I suggest adding the following as the combination of :only and :rename:

;; Refers sqrt into current NS as ccm-sqrt, other math functions are not
;; refered, e.g.
;; (ccm-sqrt 4)
[:use [clojure.contrib.math :only [sqrt] :rename {sqrt ccm-sqrt}]]

cmpitg commented Apr 24, 2014

I suggest adding the following as the combination of :only and :rename:

;; Refers sqrt into current NS as ccm-sqrt, other math functions are not
;; refered, e.g.
;; (ccm-sqrt 4)
[:use [clojure.contrib.math :only [sqrt] :rename {sqrt ccm-sqrt}]]
@mateusz-fiolka

This comment has been minimized.

Show comment Hide comment
@mateusz-fiolka

mateusz-fiolka Aug 6, 2014

@cmpitg as far as I know :use is deprecated.

@cmpitg as far as I know :use is deprecated.

@drakezhard

This comment has been minimized.

Show comment Hide comment
@drakezhard

drakezhard Mar 7, 2015

:refer lets you use the function without the namespace qualifier.

(ns wawa
(:require [datomic.api :as d :refer [q]]))

(= (d/q args) (q args) (datomic.api/q args) )

:refer lets you use the function without the namespace qualifier.

(ns wawa
(:require [datomic.api :as d :refer [q]]))

(= (d/q args) (q args) (datomic.api/q args) )

@torgeir

This comment has been minimized.

Show comment Hide comment
@torgeir

torgeir Aug 9, 2015

Awesome. I never get this right.

torgeir commented Aug 9, 2015

Awesome. I never get this right.

@Intey

This comment has been minimized.

Show comment Hide comment
@Intey

Intey Aug 16, 2015

In my case, i need to set require with refering to some function, but already have that name bounded to another func(addevent). It's was too straightforward for me to be assume immediately.

(ns project.handler.addevent
    (:require 
        [project.view.pages :refer [addevent] :rename {addevent addevent-page}))

Intey commented Aug 16, 2015

In my case, i need to set require with refering to some function, but already have that name bounded to another func(addevent). It's was too straightforward for me to be assume immediately.

(ns project.handler.addevent
    (:require 
        [project.view.pages :refer [addevent] :rename {addevent addevent-page}))
@m8win-niche

This comment has been minimized.

Show comment Hide comment
@m8win-niche

m8win-niche Sep 12, 2016

thanks bro greetings get to know

thanks bro greetings get to know

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment