by invoking the Var #’my.project.foo/bar about vector [1 2 3] . The data audience features is invoked in the form UPON it was look over as an ordinary Clojure information build because of the viewer.
Standard audience labels include explained in default-data-readers but might overridden in data_readers.clj / data_readers.cljc or by rebinding *data-readers*. If no information audience is available for a tag, the function sure in *default-data-reader-fn* would be invoked utilizing the label and importance to make a value. If *default-data-reader-fn* are nil (the standard), a RuntimeException are thrown.
If a data_readers.cljc is given, it’s read with the same semantics as virtually any cljc supply file with reader conditionals.
Integrated tagged literals
Clojure 1.4 launched the instant and UUID tagged literals. Instants experience the format #inst “yyyy-mm-ddThh:mm:ss.fff+hh:mm” . MENTION: Many of the components of this structure were elective. Look at rule for information. The default viewer will parse the provided string into a java.util.Date by default. Eg:
Since *data-readers* try a dynamic var that can be sure, you can easily replace the standard viewer with a different one. Eg, clojure.instant/read-instant-calendar will parse the literal into a java.util.Calendar , while clojure.instant/read-instant-timestamp will parse it into a java.util.Timestamp :
Default data viewer features
If no information audience is located when reading a tagged literal, the *default-data-reader-fn* is invoked. You can set your personal standard data audience work in addition to offered tagged-literal function can be used to build an object that save an unhandled literal. The item returned by tagged-literal aids keyword lookup associated with the :tag and :form :
Clojure 1.7 released a new extension (.cljc) for portable documents which can be filled by numerous Clojure systems. The principal device for handling platform-specific rule will be isolate that signal into a minimal pair of namespaces, and incorporate platform-specific models (.clj/.class or .cljs) of those namespaces.
Where is certainly not feasible to isolate the varying elements of the signal, or where in fact the signal is generally portable with merely small platform-specific parts, 1.7 additionally introduced audience conditionals, which have been supported only in cljc documents at the standard REPL. Audience conditionals should really be utilized meagerly and simply when necessary.
Audience conditionals become a viewer dispatch type beginning with #? or #? . Both contain several alternating qualities and expressions, comparable to cond . Every Clojure program enjoys a well-known “platform feature” – :clj , :cljs , :cljr . Each condition in a reader conditional is checked with the purpose until a characteristic complimentary the platform element is available. An individual conditional will look over and get back that feature’s appearance. The appearance on every non-selected branch are going to be look over but missed. A well-known :default feature will complement and may be used to provide a default. If no branches fit, no type will be browse (as if no reader conditional phrase is present).
The syntax for #? is strictly exactly the same but the term is expected to go back an assortment which can be spliced to the close context, comparable to unquote-splicing in syntax estimate. Using viewer conditional splicing towards the top level is not supported and can toss an exception. An illustration:
The browse and read-string applications optionally capture a chart of choice as a primary argument. The present element ready and reader conditional actions tends to be set-in the choices chart using these tips and prices:
But note that the Clojure viewer will inject the working platform feature :clj too. For platform-agnostic learning, read hardware.reader.
In the event the reader are invoked with <:read-cond>, the reader conditional and non-executed limbs is going to be maintained, as facts, within the returned kind. The reader-conditional would be returned as a kind that aids keywords retrieval for points with :form and a :splicing? banner. Study but missed marked literals will likely be came back as a sort that aids keywords recovery for points with :form and :tag points.
The keyed principles in chart become designated unevaluated on related industries within the defrecord. Any defrecord fields without corresponding records in the literal chart tend to be assigned nil because their importance. Any added keyed standards when you look at the chart literal are put into the resulting defrecord case.
The key in each set is actually a label that’ll be identified by the Clojure reader. The worthiness from inside the set will be the fully-qualified term of a Var which will be invoked of the reader to parse the form pursuing the tag. For example, considering the data_readers.clj document above, the Clojure viewer would parse this form: