You don't have the macro generate a call to the private function, you have
the macro call the private function directly
replace:
(defmacro call-self* [x]
`(~x ~x))
(defmacro call-self [x]
`(do
(println "calling form " ~(str x) " with itself")
(call-self ~x)))
with:
(defn- call-self* [x]
`(~x ~x))
(defmacro call-self [x]
`(do
(println "calling form " ~(str x) " with itself")
~(call-self x)))
The function call-self* is still called at compile-time and is called *by
the call-self macro*, not the generated client code. Make sense?
On Monday, March 17, 2014 10:31:36 AM UTC-7, Yoav Rubin wrote:
>
> I need to do it, as I need the arguments to remain not evaluated until
> they get to that private macro. That private macro does some work on the
> arguments before they get evaluated (the arguments themselves are
> s-expressions).
>
> Still, even if it is a private function - how can I call it from a macro
> that is called from another namespace?
>
> On Monday, March 17, 2014 4:19:19 PM UTC+2, James Reeves wrote:
>>
>> Don't use a private macro: use a function that spits out an s-expression.
>>
>> - James
>>
>>
>> On 17 March 2014 06:02, Yoav Rubin <[email protected]> wrote:
>>
>>> Hi All,
>>>
>>> I have a namespace that has two macros as part of its public API, and
>>> another macro that act as helpers for the public macro
>>>
>>> (defmacro helper-mac [arg1 arg2 f]
>>> ;; do stuff with f , arg1 and arg2
>>> )
>>>
>>> (defmacro m0 [arg1 arg2]
>>> (priv-mac arg1 arg2 f1)
>>> )
>>>
>>> (defmacro m1 [arg1 arg2] (
>>> (priv-mac arg1 arg2 f2)
>>> )
>>>
>>> f1 and f2 are just two functions.
>>>
>>> I would like to make the helper macro private (using ^:private), but
>>> when I do it and call either m0 or m1 from another namespace, I get an
>>> exception saying that helper-mac is private.
>>>
>>> Is it possible to call from to a macro in another namespace when that
>>> macro is calling a private macro in its namespace?
>>>
>>> Thanks,
>>>
>>> Yoav
>>>
>>> --
>>> You received this message because you are subscribed to the Google
>>> Groups "Clojure" group.
>>> To post to this group, send email to [email protected]
>>> Note that posts from new members are moderated - please be patient with
>>> your first post.
>>> To unsubscribe from this group, send email to
>>> [email protected]
>>> 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 [email protected].
>>> For more options, visit https://groups.google.com/d/optout.
>>>
>>
>>
--
You received this message because you are subscribed to the Google
Groups "Clojure" group.
To post to this group, send email to [email protected]
Note that posts from new members are moderated - please be patient with your
first post.
To unsubscribe from this group, send email to
[email protected]
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 [email protected].
For more options, visit https://groups.google.com/d/optout.