Coding in the REPLλ︎
Clojure code can be typed into the REPL directly and the result instantly returned. Code can also be loaded from a project source code files, to run pre-written code.
Clojure Editors are the main tool for writing code
An editor connected to a Clojure REPL and evaluating from source code files is the most effective way for writing Clojure code.
Evaluating code in an editor automatically uses the correct namespace, avoiding the need to change namespaces or fully qualify function calls. Evaluation results can be shown in-line, as comments next to the code or in a data inspector.
Editors provide structural editing and Clojure syntax checking, along with general editor features.
Using the REPLλ︎
Use the clojure
command to start a REPL with Rebel, or the clj
wrapper with the Clojure CLI REPL (requires rlwrap
binary).
Start a Clojure REPL with Rebel terminal UI which also starts an nREPL server which a Clojure editor can connect too.
A REPL prompt displays ready to evaluate a Clojure expression.
Start a Clojure REPL with a basic UI which also starts an nREPL server which a Clojure editor can connect too.
The
clj
wrapper requiresrlwrap
binary.
A REPL prompt displays ready to evaluate a Clojure expression.
Project dependencies automatically downloaded on REPL start
When a REPL is started from the root of a Clojure project the project dependencies are automatically downloaded (unless previously downloaded to the local maven cache, .m2/
) and project specific paths are added, e.g. src
tree.
Use REPL with a Clojure project
A REPL can run without a Clojure project, however, libraries and code are simpler to manage within project source and configuration files.
REPL start stateλ︎
The Clojure REPL always starts in the user
namespace.
During startup the the clojure.core
functions are required (made available) in the user namespace, so (map inc [1 2 3])
can be called without specifying the clojure.core
namespace in which those functions are defined.
If clojure.core were not required, then the expression would be
(clojure.core/map clojure.core/inc [1 2 3])
Evaluating codeλ︎
Type Clojure code at the => user
REPL prompt
Press Enter
to evaluate the code and see the result.
Up and Down navigate the REPL history, providing an efficient way to evaluate the same code many times.
In Rebel, typing part of function name shows matches available, Tab to cycle through the choices, Enter to select.
Load code from fileλ︎
Clojure code is usually saved in files and each file has a namespace definition that matches the file path, using the ns
function. The file src/practicalli/playground.clj
has the namespace practicalli.playground
Requiring the namespace of a file will evaluate (load) the code from that file in the REPL.
Functions defined in that namespace can be called using their fully qualified names. e.g. if the namespace contains a function called main
, that function can be called using (practicalli.playground/main)
.
Change namespaces
Change the namespace to practicalli.playground
to call functions defined in that namespace by their unqualified function name, eg. (main)
, rather than the fully qualified name, e.g. (practicalli.playground/main)
in-ns
will change change the current namespace to the one specified as an argument.
Now the (main)
function can be called without having to include the full namespace name.
Typically it is more efficient to stay in the
user
namespace and require all other namespaces required.
Reload code changesλ︎
The :reload
option to require
will load in any changes to a namespace that happened outside of the REPL, eg. using an editor to change the source code in the file.
Use the :verbose
option when issues occur loading a particular namespace. As the namespace being required may also require other namespaces, multiple namespaces may be loaded from one require
expression.
:verbose
shows a full list of the namespaces being loaded.
Reload in Terminal REPL for unconnected editor
When using an editor that is not connected to the Clojure REPL, then reloading is an effective way of updating the code with all the changes saved in the file.
Close REPLλ︎
:repl/quit
at the REPL prompt will end the REPL session and all code not saved to a file will be lost.
Ctrl+c if the repl process does not return to the shell prompt.