> If this syntax were unified into something like you suggest we have a problem: > > (ns user > [foo IBar]) ;; What is IBar, a class or a var?
Look what happens after we also do this: foo=> (defn IBar [] "a") #'foo/IBar foo=> (ns user) nil user=> (class foo.IBar) java.lang.Class user=> (class foo/IBar) foo$IBar Now foo/IBar refers to the function, so my understanding is that interfaces are bound to vars just like functions. So, to answer your question: > (ns user > [foo IBar]) ;; What is IBar, a class or a var? IBar is a class, it's the same as an import statement. If you want the var, do either: (ns user [foo]) foo/IBar Or, if you want to refer the protocol so that you don't have to qualify it as above, simply do this: (ns user [foo (IBar)]) It's the same thing as writing this at a REPL: (require '[foo :refer (IBar)]) - Greg -- Please do not email me anything that you are not comfortable also sharing with the NSA. On Aug 6, 2013, at 1:09 PM, Timothy Baldridge <tbaldri...@gmail.com> wrote: > Sure, put this into a repl: > > (ns foo) > > (defprotocol IBar > (do-stuff [this])) > > (ns user > (require [foo]) > (import [foo IBar])) > > (class foo/IBar) > (class foo.IBar) > > > If this syntax were unified into something like you suggest we have a problem: > > (ns user > [foo IBar]) ;; What is IBar, a class or a var? > > Timothy > > > On Tue, Aug 6, 2013 at 10:56 AM, Greg <g...@kinostudios.com> wrote: > >> Yeah, there's a bug in the code, but let me try to redefine the problem. > >> Assume I have a namespace called foo that defines a protocol (and hence an > >> interface) called bar. I then also have a namespace called foo.bar. How do > >> I tell the new syntax to import each? If I simply say "go get foo.bar" > >> what are you going to load, the .clj file, or the java interface? > > It would also help to have an example of how it's currently done. > > - Greg > > -- > Please do not email me anything that you are not comfortable also sharing > with the NSA. > > On Aug 6, 2013, at 12:41 PM, Greg <g...@kinostudios.com> wrote: > > >> It's exactly the same as a normal require. Ns allows vectors/seqs > >> symbols/keywords to be used interchangeably. Some people use (:require) > >> others use (require), ns just uses ns/namespace to get the data on the > >> first of each item after the symbol. > > > > Wow that's confusing! > > > > I just view that as yet another reason to change the syntax. > > > > To answer your question though, I'd do both syntax's a favor and interpret > > "[require [clojure.string :as c]]" using the new syntax. It would save a > > lot of newbies many headaches. Think of the newbies. > > > >> Yeah, there's a bug in the code, but let me try to redefine the problem. > >> Assume I have a namespace called foo that defines a protocol (and hence an > >> interface) called bar. I then also have a namespace called foo.bar. How do > >> I tell the new syntax to import each? If I simply say "go get foo.bar" > >> what are you going to load, the .clj file, or the java interface? > > > > I think part of the problem here is that I'm not very well educated on this > > topic yet. Perhaps you can help: > > > > - If you defined a protocol Foo in user, is it referenced as user.Foo from > > another ns, or user/Foo ? Or both?? > > > > - Can you have a function Foo at the same time as a protocol Foo in the > > same namespace? > > > > - What about records? Can you have a record Foo and a protocol Foo? > > > > - Can you have a class Foo and an protocol Foo? > > > > Clojure and I are already confused here: > > > > baz=> (defprotocol g (dostuff [this])) > > g > > baz=> g > > {:on-interface baz.g, :on baz.g, :sigs {:dostuff {:doc nil, :arglists > > ([this]), :name dostuff}}, :var #'baz/g, :method-map {:dostuff :dostuff}, > > :method-builders {#'baz/dostuff #<baz$eval300$fn__301 > > baz$eval300$fn__301@7c2aa00c>}} > > baz=> (defn g [] "a") > > #'baz/g > > baz=> g > > #<baz$g baz$g@4bb2668f> > > > > And I'm not sure how to get the protocol back... > > > > - Greg > > > > -- > > Please do not email me anything that you are not comfortable also sharing > > with the NSA. > > > > On Aug 6, 2013, at 11:43 AM, Timothy Baldridge <tbaldri...@gmail.com> wrote: > > > >>>>> (ns foo > >>>>> [require [clojure.string :as c]]) > >> > >>>> I've never seen that before. What does it do? > >> > >> It's exactly the same as a normal require. Ns allows vectors/seqs > >> symbols/keywords to be used interchangeably. Some people use (:require) > >> others use (require), ns just uses ns/namespace to get the data on the > >> first of each item after the symbol. > >> > >> > >> Yeah, there's a bug in the code, but let me try to redefine the problem. > >> Assume I have a namespace called foo that defines a protocol (and hence an > >> interface) called bar. I then also have a namespace called foo.bar. How do > >> I tell the new syntax to import each? If I simply say "go get foo.bar" > >> what are you going to load, the .clj file, or the java interface? > >> > >> Timothy > >> > >> > >> On Tue, Aug 6, 2013 at 9:39 AM, Phillip Lord > >> <phillip.l...@newcastle.ac.uk> wrote: > >> Greg <g...@kinostudios.com> writes: > >> > >>>> I am dubious about distinguishing between lists and vectors. Currently, > >>>> as far as I can tell, the ns is agnostic, and only cares about them > >>>> being sequential. This is probably one of the sources of confusion for > >>>> beginners -- they see both and don't see why > >>> > >>> The reason for distinguishing between lists and vectors is as you say, > >>> it's > >>> confusing for beginnings. Also, it allows the syntax to have greater > >>> functionality/power. > >> > >> Really dubious about this. Having to keep in my head when I need to use > >> [] and when I need to use () is a significant problem when starting. It > >> was my realisation that for the ns declaration you don't that made > >> things easier. > >> > >>>> Also, I am confused as to how you distinguish between > >>>> [core [matrix math bs]] being equivalent to :use while > >>>> Is [one reload middleware] also :use? Or :require? > >>> > >>> Nested vectors = :use. > >>> > >>> Thus, as the comment says, [core [matrix math bs]] => (:use (core matrix > >>> math > >>> bs)) > >>> > >>> It's a bit confusing in the current syntax (if I have it correct), because > >>> from it, it's not clear why "core" isn't "used". > >>> > >>> [one reload middleware] > >>> > >>> Is equivalent to: > >>> > >>> (:require [one.reload :as reload] > >>> [one.middleware :as middleware]) > >> > >> Scares me to be honest. You now have an implicit alias ":as reload", and > >> are distinguishing between having an alias and having no qualification > >> by nesting or otherwise. > >> > >> I do like the idea of enforcing nesting though in > >> > >> [core [matrix math bs]] > >> > >> Phil > >> > >> -- > >> -- > >> 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. > >> > >> > >> > >> > >> > >> -- > >> “One of the main causes of the fall of the Roman Empire was that–lacking > >> zero–they had no way to indicate successful termination of their C > >> programs.” > >> (Robert Firth) > >> > >> -- > >> -- > >> 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. > >> > >> > > > > > > > -- > “One of the main causes of the fall of the Roman Empire was that–lacking > zero–they had no way to indicate successful termination of their C programs.” > (Robert Firth) > > -- > -- > 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. > >
signature.asc
Description: Message signed with OpenPGP using GPGMail