howto use reify in defmacro

2013-12-18 Thread Xiangtao Zhou
hi all,

I want to use reify in macro, but the namespace is the problem. the 
following code shows what have done. is there a way to make it right?

(defmacro def-site-entity
  [ent  body]
  `(let [e# (create-e)]
 (def ~ent (reify clojure.lang.ILookup 
 (valAt [key not-found]
   (condp = key
 :db @t1
 :options @t2
 (get e# key not-found)))


Joe

-- 
-- 
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.
For more options, visit https://groups.google.com/groups/opt_out.


howto use reify in defmacro

2013-12-18 Thread Xiangtao Zhou
hi all,

I want to use reify in macro, but the namespace is the problem. the 
following code shows what have done. is there a way to make it right?

(defmacro def-site-entity
  [ent  body]
  `(let [e# (create-e)]
 (def ~ent (reify clojure.lang.ILookup 
 (valAt [key not-found]
   (condp = key
 :db @t1
 :options @t2
 (get e# key not-found)))


Joe

-- 
-- 
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.
For more options, visit https://groups.google.com/groups/opt_out.


Re: howto use reify in defmacro

2013-12-18 Thread Tassilo Horn
Xiangtao Zhou tao...@gmail.com writes:

Hi!

 I want to use reify in macro, but the namespace is the problem. the
 following code shows what have done. is there a way to make it right?

Probably this will work:

(defmacro def-site-entity
  [ent  body]
  `(let [e# (create-e)]
 (def ~ent (reify ~'clojure.lang.ILookup 
 (valAt [key# not-found#]
   (condp = key#
 :db (deref ~'t1)
 :options (deref ~'t2)
 (get e# key# not-found#)))

Basically, every symbol that shouldn't be qualified but should appear as
written in the macro definition has to be prefixed with ~'.  I think you
could also write ~'@t1 instead of the more verbose form (deref ~'t1) but
I wasn't sure.
 
Bye,
Tassilo

-- 
-- 
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.
For more options, visit https://groups.google.com/groups/opt_out.


Re: howto use reify in defmacro

2013-12-18 Thread Jim - FooBar();
as an aside, if you're writing def-like macros, I'd encourage you to 
look at 'clojure.tools.macro/name-with-attributes'


Jim


On 18/12/13 12:14, Tassilo Horn wrote:

Xiangtao Zhou tao...@gmail.com writes:

Hi!


I want to use reify in macro, but the namespace is the problem. the
following code shows what have done. is there a way to make it right?

Probably this will work:

(defmacro def-site-entity
   [ent  body]
   `(let [e# (create-e)]
  (def ~ent (reify ~'clojure.lang.ILookup
  (valAt [key# not-found#]
(condp = key#
  :db (deref ~'t1)
  :options (deref ~'t2)
  (get e# key# not-found#)))

Basically, every symbol that shouldn't be qualified but should appear as
written in the macro definition has to be prefixed with ~'.  I think you
could also write ~'@t1 instead of the more verbose form (deref ~'t1) but
I wasn't sure.
  
Bye,

Tassilo



--
--
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.
For more options, visit https://groups.google.com/groups/opt_out.


Re: howto use reify in defmacro

2013-12-18 Thread Joe (Zhou Xiangtao)
hi Tassilo,

that's great, thanks. I current use a function wrap reify, it's simple.

(defn make-reify [entity] ...)

(defmacro def-site-entity
`(let [e# (create-e)]
   (def ~ent (make-reify e#

Joe


On Wed, Dec 18, 2013 at 8:14 PM, Tassilo Horn t...@gnu.org wrote:

 Xiangtao Zhou tao...@gmail.com writes:

 Hi!

  I want to use reify in macro, but the namespace is the problem. the
  following code shows what have done. is there a way to make it right?

 Probably this will work:

 (defmacro def-site-entity
   [ent  body]
   `(let [e# (create-e)]
  (def ~ent (reify ~'clojure.lang.ILookup
  (valAt [key# not-found#]
(condp = key#
  :db (deref ~'t1)
  :options (deref ~'t2)
  (get e# key# not-found#)))

 Basically, every symbol that shouldn't be qualified but should appear as
 written in the macro definition has to be prefixed with ~'.  I think you
 could also write ~'@t1 instead of the more verbose form (deref ~'t1) but
 I wasn't sure.

 Bye,
 Tassilo




-- 
Zhou Xiangtao
Email: tao...@gmail.com

-- 
-- 
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.
For more options, visit https://groups.google.com/groups/opt_out.


Re: howto use reify in defmacro

2013-12-18 Thread Tassilo Horn
Joe (Zhou Xiangtao) tao...@gmail.com writes:

 that's great, thanks. I current use a function wrap reify, it's
 simple.

 (defn make-reify [entity] ...)

 (defmacro def-site-entity
 `(let [e# (create-e)]
(def ~ent (make-reify e#

That's even better. ;-)

Bye,
Tassilo

-- 
-- 
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.
For more options, visit https://groups.google.com/groups/opt_out.