Re: Interop question concerning optional args
There is a ticket filed for it, in case some contributor wants to update the patches for it. It got intertwined with CLJ-445's patch, which hasn't been updated in a while, so you might want to start fresh rather than untangle the history there. http://dev.clojure.org/jira/browse/CLJ-440 Andy On Dec 11, 2012, at 4:30 AM, Vladimir Tsichevski wrote: > I found this (mis)feature quite annoying too. I think, we all shall ask the > language authors to fix it. > > On Tuesday, December 11, 2012 10:44:34 AM UTC+4, Andy Fingerhut wrote: > You can pass in a length 0 array of java.nio.file.attribute.FileAttribute's > like so: > > (java.nio.file.Files/createTempDirectory "mytempname" (make-array > java.nio.file.attribute.FileAttribute 0)) > > Andy > > > On Dec 10, 2012, at 8:54 PM, Dave Kincaid wrote: > >> I just came across this same problem while trying to use Java 7's >> java.nio.file.Files.createTempDirectory() >> (http://docs.oracle.com/javase/7/docs/api/java/nio/file/Files.html#createTempDirectory(java.lang.String, >> java.nio.file.attribute.FileAttribute...)) >> >> Clojure won't let me just do (java.nio.file.Files/createTempDirectory >> "mydir") >> >> It wants the FileAttribute argument. Can anyone help me get past this? I'm >> stuck since I really can't figure out how to create a FileAttribute. Am I >> better off just using Apache commons or something like that? >> >> On Monday, September 27, 2010 7:20:04 PM UTC-5, ataggart wrote: >> The vararg at the end of the method is just syntactic sugar for an >> array, so the "add" method actually takes 4 args, the last being a >> Resource array. The java compiler just replaces "missing" varargs >> with an empty array. >> >> My guess is that the reflection mechanisms in the compiler just look >> at type/arity. The Method object has a isVarArg() boolean, so that >> could be used to allow omitting varargs altogether. That would need >> to be an enhancement to the clojure compiler, so I opened a ticket: >> >> https://www.assembla.com/spaces/clojure/tickets/440-java-method-calls-cannot-omit-varargs >> >> >> >> On Sep 27, 1:16 pm, JonathanBelolo wrote: >> > While toying with the Sesame2.3 library, I've come across the >> > following behavior for the first time. >> > >> > This is taken from the api doc for >> > org.openrdf.repository.base.RepositoryConnectionBase: >> > >> > add(Resource subject, URI predicate, Value object, Resource... >> > contexts) >> > Adds a statement with the specified subject, predicate and >> > object to this repository, optionally to one or more named contexts. >> > >> > But apparently, Clojure seems to think the optional args are >> > mandatory... >> > >> > (.add con alice RDF/TYPE person) >> > >> > No matching method found: add for class >> > org.openrdf.repository.sail.SailRepositoryConnection >> > [Thrown class java.lang.IllegalArgumentException] >> > >> > So I run >> > >> > (grep #".add" (.getMethods (.getClass con))) >> > >> > #> > org.openrdf.repository.base.RepositoryConnectionBase.add(org.openrdf.model. >> > >> > Resource,org.openrdf.model.URI,org.openrdf.model.Value,org.openrdf.model.Re >> > source[]) >> > throws org.openrdf.repository.RepositoryException>) >> > >> > Finally the following works... >> > >> > (.add con alice RDF/TYPE person (make-array Resource 1)) >> > nil >> > >> > Is this behavior normal? Are optional args mandatory when called with >> > interop? >> > >> > Thanks for your help :) >> > >> > Jonathan >> >> -- >> You received this message because you are subscribed to the Google >> Groups "Clojure" group. >> To post to this group, send email to clo...@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+u...@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 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 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
Re: Interop question concerning optional args
I found this (mis)feature quite annoying too. I think, we all shall ask the language authors to fix it. On Tuesday, December 11, 2012 10:44:34 AM UTC+4, Andy Fingerhut wrote: > > You can pass in a length 0 array of > java.nio.file.attribute.FileAttribute's like so: > > (java.nio.file.Files/createTempDirectory "mytempname" (make-array > java.nio.file.attribute.FileAttribute 0)) > > Andy > > > On Dec 10, 2012, at 8:54 PM, Dave Kincaid wrote: > > I just came across this same problem while trying to use Java 7's > java.nio.file.Files.createTempDirectory() > (http://docs.oracle.com/javase/7/docs/api/java/nio/file/Files.html#createTempDirectory(java.lang.String, > > java.nio.file.attribute.FileAttribute...)) > > Clojure won't let me just do (java.nio.file.Files/createTempDirectory > "mydir") > > It wants the FileAttribute argument. Can anyone help me get past this? I'm > stuck since I really can't figure out how to create a FileAttribute. Am I > better off just using Apache commons or something like that? > > On Monday, September 27, 2010 7:20:04 PM UTC-5, ataggart wrote: >> >> The vararg at the end of the method is just syntactic sugar for an >> array, so the "add" method actually takes 4 args, the last being a >> Resource array. The java compiler just replaces "missing" varargs >> with an empty array. >> >> My guess is that the reflection mechanisms in the compiler just look >> at type/arity. The Method object has a isVarArg() boolean, so that >> could be used to allow omitting varargs altogether. That would need >> to be an enhancement to the clojure compiler, so I opened a ticket: >> >> >> https://www.assembla.com/spaces/clojure/tickets/440-java-method-calls-cannot-omit-varargs >> >> >> >> On Sep 27, 1:16 pm, JonathanBelolo wrote: >> > While toying with the Sesame2.3 library, I've come across the >> > following behavior for the first time. >> > >> > This is taken from the api doc for >> > org.openrdf.repository.base.RepositoryConnectionBase: >> > >> > add(Resource subject, URI predicate, Value object, Resource... >> > contexts) >> > Adds a statement with the specified subject, predicate and >> > object to this repository, optionally to one or more named contexts. >> > >> > But apparently, Clojure seems to think the optional args are >> > mandatory... >> > >> > (.add con alice RDF/TYPE person) >> > >> > No matching method found: add for class >> > org.openrdf.repository.sail.SailRepositoryConnection >> > [Thrown class java.lang.IllegalArgumentException] >> > >> > So I run >> > >> > (grep #".add" (.getMethods (.getClass con))) >> > >> > #> > >> org.openrdf.repository.base.RepositoryConnectionBase.add(org.openrdf.model. >> Resource,org.openrdf.model.URI,org.openrdf.model.Value, >> org.openrdf.model.Re source[]) >> > throws org.openrdf.repository.RepositoryException>) >> > >> > Finally the following works... >> > >> > (.add con alice RDF/TYPE person (make-array Resource 1)) >> > nil >> > >> > Is this behavior normal? Are optional args mandatory when called with >> > interop? >> > >> > Thanks for your help :) >> > >> > Jonathan > > > -- > You received this message because you are subscribed to the Google > Groups "Clojure" group. > To post to this group, send email to clo...@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+u...@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 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
Re: Interop question concerning optional args
You can pass in a length 0 array of java.nio.file.attribute.FileAttribute's like so: (java.nio.file.Files/createTempDirectory "mytempname" (make-array java.nio.file.attribute.FileAttribute 0)) Andy On Dec 10, 2012, at 8:54 PM, Dave Kincaid wrote: > I just came across this same problem while trying to use Java 7's > java.nio.file.Files.createTempDirectory() > (http://docs.oracle.com/javase/7/docs/api/java/nio/file/Files.html#createTempDirectory(java.lang.String, > java.nio.file.attribute.FileAttribute...)) > > Clojure won't let me just do (java.nio.file.Files/createTempDirectory "mydir") > > It wants the FileAttribute argument. Can anyone help me get past this? I'm > stuck since I really can't figure out how to create a FileAttribute. Am I > better off just using Apache commons or something like that? > > On Monday, September 27, 2010 7:20:04 PM UTC-5, ataggart wrote: > The vararg at the end of the method is just syntactic sugar for an > array, so the "add" method actually takes 4 args, the last being a > Resource array. The java compiler just replaces "missing" varargs > with an empty array. > > My guess is that the reflection mechanisms in the compiler just look > at type/arity. The Method object has a isVarArg() boolean, so that > could be used to allow omitting varargs altogether. That would need > to be an enhancement to the clojure compiler, so I opened a ticket: > > https://www.assembla.com/spaces/clojure/tickets/440-java-method-calls-cannot-omit-varargs > > > > On Sep 27, 1:16 pm, JonathanBelolo wrote: > > While toying with the Sesame2.3 library, I've come across the > > following behavior for the first time. > > > > This is taken from the api doc for > > org.openrdf.repository.base.RepositoryConnectionBase: > > > > add(Resource subject, URI predicate, Value object, Resource... > > contexts) > > Adds a statement with the specified subject, predicate and > > object to this repository, optionally to one or more named contexts. > > > > But apparently, Clojure seems to think the optional args are > > mandatory... > > > > (.add con alice RDF/TYPE person) > > > > No matching method found: add for class > > org.openrdf.repository.sail.SailRepositoryConnection > > [Thrown class java.lang.IllegalArgumentException] > > > > So I run > > > > (grep #".add" (.getMethods (.getClass con))) > > > > # > org.openrdf.repository.base.RepositoryConnectionBase.add(org.openrdf.model. > > Resource,org.openrdf.model.URI,org.openrdf.model.Value,org.openrdf.model.Re > > source[]) > > throws org.openrdf.repository.RepositoryException>) > > > > Finally the following works... > > > > (.add con alice RDF/TYPE person (make-array Resource 1)) > > nil > > > > Is this behavior normal? Are optional args mandatory when called with > > interop? > > > > Thanks for your help :) > > > > Jonathan > > -- > 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 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
Re: Interop question concerning optional args
I just came across this same problem while trying to use Java 7's java.nio.file.Files.createTempDirectory() (http://docs.oracle.com/javase/7/docs/api/java/nio/file/Files.html#createTempDirectory(java.lang.String, java.nio.file.attribute.FileAttribute...)) Clojure won't let me just do (java.nio.file.Files/createTempDirectory "mydir") It wants the FileAttribute argument. Can anyone help me get past this? I'm stuck since I really can't figure out how to create a FileAttribute. Am I better off just using Apache commons or something like that? On Monday, September 27, 2010 7:20:04 PM UTC-5, ataggart wrote: > > The vararg at the end of the method is just syntactic sugar for an > array, so the "add" method actually takes 4 args, the last being a > Resource array. The java compiler just replaces "missing" varargs > with an empty array. > > My guess is that the reflection mechanisms in the compiler just look > at type/arity. The Method object has a isVarArg() boolean, so that > could be used to allow omitting varargs altogether. That would need > to be an enhancement to the clojure compiler, so I opened a ticket: > > > https://www.assembla.com/spaces/clojure/tickets/440-java-method-calls-cannot-omit-varargs > > > > On Sep 27, 1:16 pm, JonathanBelolo wrote: > > While toying with the Sesame2.3 library, I've come across the > > following behavior for the first time. > > > > This is taken from the api doc for > > org.openrdf.repository.base.RepositoryConnectionBase: > > > > add(Resource subject, URI predicate, Value object, Resource... > > contexts) > > Adds a statement with the specified subject, predicate and > > object to this repository, optionally to one or more named contexts. > > > > But apparently, Clojure seems to think the optional args are > > mandatory... > > > > (.add con alice RDF/TYPE person) > > > > No matching method found: add for class > > org.openrdf.repository.sail.SailRepositoryConnection > > [Thrown class java.lang.IllegalArgumentException] > > > > So I run > > > > (grep #".add" (.getMethods (.getClass con))) > > > > # > > org.openrdf.repository.base.RepositoryConnectionBase.add(org.openrdf.model. > Resource,org.openrdf.model.URI,org.openrdf.model.Value, > org.openrdf.model.Re source[]) > > throws org.openrdf.repository.RepositoryException>) > > > > Finally the following works... > > > > (.add con alice RDF/TYPE person (make-array Resource 1)) > > nil > > > > Is this behavior normal? Are optional args mandatory when called with > > interop? > > > > Thanks for your help :) > > > > Jonathan -- 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
Re: Interop question concerning optional args
The vararg at the end of the method is just syntactic sugar for an array, so the "add" method actually takes 4 args, the last being a Resource array. The java compiler just replaces "missing" varargs with an empty array. My guess is that the reflection mechanisms in the compiler just look at type/arity. The Method object has a isVarArg() boolean, so that could be used to allow omitting varargs altogether. That would need to be an enhancement to the clojure compiler, so I opened a ticket: https://www.assembla.com/spaces/clojure/tickets/440-java-method-calls-cannot-omit-varargs On Sep 27, 1:16 pm, JonathanBelolo wrote: > While toying with the Sesame2.3 library, I've come across the > following behavior for the first time. > > This is taken from the api doc for > org.openrdf.repository.base.RepositoryConnectionBase: > > add(Resource subject, URI predicate, Value object, Resource... > contexts) > Adds a statement with the specified subject, predicate and > object to this repository, optionally to one or more named contexts. > > But apparently, Clojure seems to think the optional args are > mandatory... > > (.add con alice RDF/TYPE person) > > No matching method found: add for class > org.openrdf.repository.sail.SailRepositoryConnection > [Thrown class java.lang.IllegalArgumentException] > > So I run > > (grep #".add" (.getMethods (.getClass con))) > > # org.openrdf.repository.base.RepositoryConnectionBase.add(org.openrdf.model. > Resource,org.openrdf.model.URI,org.openrdf.model.Value,org.openrdf.model.Re > source[]) > throws org.openrdf.repository.RepositoryException>) > > Finally the following works... > > (.add con alice RDF/TYPE person (make-array Resource 1)) > nil > > Is this behavior normal? Are optional args mandatory when called with > interop? > > Thanks for your help :) > > Jonathan -- 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
Interop question concerning optional args
While toying with the Sesame2.3 library, I've come across the following behavior for the first time. This is taken from the api doc for org.openrdf.repository.base.RepositoryConnectionBase: add(Resource subject, URI predicate, Value object, Resource... contexts) Adds a statement with the specified subject, predicate and object to this repository, optionally to one or more named contexts. But apparently, Clojure seems to think the optional args are mandatory... (.add con alice RDF/TYPE person) No matching method found: add for class org.openrdf.repository.sail.SailRepositoryConnection [Thrown class java.lang.IllegalArgumentException] So I run (grep #".add" (.getMethods (.getClass con))) #) Finally the following works... (.add con alice RDF/TYPE person (make-array Resource 1)) nil Is this behavior normal? Are optional args mandatory when called with interop? Thanks for your help :) Jonathan -- 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