Thanks Thomas,

That was very helpful.  I tried your suggestion and it works in JVM
ClojureScript.  That method does not work on bootstrapped ClojureScript
though.

As far as I understand this is a result of bootstrapped ClojureScript
evaluating the .clj(c) file in the same JavaScript environment.
Bootstrapped ClojureScript tries to emulate the separate compilation
phase by putting all vars defined in the .clj file in a new namespace
ending with `$macros` suffix.

In other words, I had to do something like the following in order for my
assertion to work on both JVM and bootstrapped ClojureScript:

> (defmethod #?(:cljs cljs.test$macros/assert-expr
>               :clj  cljs.test/assert-expr)
>               ...

Is this the best way to achieve this?

Thanks,

JS

Thomas Heller <th.hel...@gmail.com> writes:

> Hey,
>
> cljs.test/assert-expr is part of the CLJ macro side so it can't be extended
> from a CLJS REPL. You can write it in a .clj file and use (require-macros
> 'that.ns) from the CLJS REPL or use :require-macros in the ns form that
> uses the new assert-expr.
>
> HTH,
> Thomas
>
> On Thursday, September 26, 2019 at 9:43:19 PM UTC+2, jvshahid wrote:
>>
>> Hi all,
>>
>> I am trying to implement custom assertions in ClojureScript.  I tried to
>> use defmethod but got the following error:
>>
>> > clojure -Sdeps '{:deps {org.clojure/clojurescript {:mvn/version
>> "1.10.520"}}}' -m cljs.main --repl --repl-env node
>> > cljs.user=> (require '[cljs.test])
>> > nil
>> > cljs.user=> (defmethod cljs.test/assert-expr 'foo [& arg])
>> > WARNING: Use of undeclared Var cljs.test/assert-expr at line 1 <cljs
>> repl>
>> > Execution error (Error) at (<cljs repl>:1).
>> > No protocol method IMultiFn.-add-method defined for type undefined:
>> >
>> > cljs.user=> cljs.test/assert-expr
>> > WARNING: Use of undeclared Var cljs.test/assert-expr at line 1 <cljs
>> repl>
>> > nil
>>
>> What am I doing wrong?
>>
>> Thanks,
>>
>> JS
>>

-- 
You received this message because you are subscribed to the Google
Groups "Clojure" group.
To post to this group, send email to clojure@googlegroups.com
Note that posts from new members are moderated - please be patient with your 
first post.
To unsubscribe from this group, send email to
clojure+unsubscr...@googlegroups.com
For more options, visit this group at
http://groups.google.com/group/clojure?hl=en
--- 
You received this message because you are subscribed to the Google Groups 
"Clojure" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to clojure+unsubscr...@googlegroups.com.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/clojure/87impcm8bf.fsf%40gmail.com.

Reply via email to