This page is not created by, affiliated with, or supported by Slack Technologies, Inc.
2019-06-04
Channels
- # announcements (4)
- # beginners (110)
- # boot (6)
- # calva (23)
- # cider (14)
- # cljdoc (5)
- # cljs-dev (50)
- # cljsrn (3)
- # clojure (105)
- # clojure-europe (3)
- # clojure-italy (46)
- # clojure-nl (6)
- # clojure-spec (19)
- # clojure-sweden (1)
- # clojure-uk (78)
- # clojurescript (66)
- # core-async (5)
- # cursive (19)
- # data-science (16)
- # datomic (3)
- # events (2)
- # fulcro (11)
- # hoplon (53)
- # jobs (4)
- # jobs-discuss (6)
- # keechma (51)
- # leiningen (3)
- # nrepl (25)
- # off-topic (95)
- # parinfer (8)
- # precept (1)
- # reitit (61)
- # remote-jobs (1)
- # rewrite-clj (75)
- # ring-swagger (2)
- # robots (3)
- # shadow-cljs (43)
- # tools-deps (28)
- # vim (2)
👋 I wanted to start playing with clojure and corda… I added
[net.corda/corda "4.0"]]
to project.clj and ran lein install
from lein repl
, I get this:
=> (require 'net.corda.core)
FileNotFoundException Could not locate net/ccorda/core__init.class or net/ccorda/core.clj on classpath. clojure.lang.RT.load (RT.java:463)
are there any immediate gotchas I should be aware of? 🙂is that a Clojure thing or a Java thing?
hi guys quick question is there a way to https://github.com/clojure/tools.trace a macro?
I doubt there is - with cider I'm getting Var #'... can't be traced because it's not bound to a function
.
Hello. I have no problem running on Macos, but on Windows npx
complains that 'clojure' is not found on system path. See screenshot. Any idea how to fix?
I’d bet shadow-cljs is looking for clojure
specifically. It might be as simple as copying CLJ.BAT
to CLOJURE.BAT
, but istr there’s some subtle difference between the two.
Thanks @UGPM7GTKJ! You were (partly) right. I'll have to investigate further if I find the time today but it's not quite working yet.
On my system, clj
is just an rlwrap’d clojure
; and clojure
is a pretty involved shell script that wraps a java clojure.main
call.
I’ve heard the Windows story is more complicated, and I no longer have any Windows machines to investigate. Sorry.
I am not the original author, so cannot answer why the original author chose that implementation of update-in
, but I can make a guess. I suspect it may help with performance to do it that way, rather than making update-in recursive. update-in take a variable number of args using & args
at the end of its arg list, but up
does not.
Hi. I am wondering what pattern or language construction functional programming (including Clojure) uses in order to get the first successful result. Lets say I have functions A, B, C. Function A checks if function B or C returns the result not equal to 0 (for example). The important part - function A checks the returns of B and C in order. Which means function A returns B if B returns not 0. And functions A returns C if B returns 0. How do I solve such kind of problem in Clojure? 🙂
Do you want function A to return "the function B" if B returns a non-0 value? Or do you want function A to return "the value that function B returned"
If you meant "the function B", you could write A this way:
(defn A [x]
(if (= (B x) 0)
C
B))
assuming that function B takes a single argument, here called x
@andy.fingerhut I am coming here from OOP world. I assume I would like to have the scenario "the value that function B returned", not "the function B". I am basically wondering if it is possible to overcome this problem without repeating the check twice in terms of memory (to not store the result of B) and CPU (to not run the B twice).
Maybe something like this, then?
(defn A [x]
(let [B-result (B x)]
(if (not= B-result 0)
B-result
(C x))))
That stores the result of B, but I have a hard time imagining how you check whether the result of function B was 0 or not, without storing it somewhere, at least temporarily.
One common case is to have function B return nil to indicate “not the value you want,” then you can just do (defn a [x] (or (b x) (c x))
@U9WPNPZE3 This is the best solution: adopt nil
as return value. Note that you can keep stacking options in or
; (or a b c d e f g…)
, and it'll return the first truthy alternative.
sorry to have asked then jetted yesterday. I added [net.corda/corda "4.0"]
to the :dependencies in project.clj, and from the lein repl, when I do (import ’corda.core), I receive
ClassNotFoundException corda.core java.net.URLClassLoader.findClass (URLClassLoader.java:382)
. Do I need to insert the import statement into its own module and then import that namespace instead of trying to play around with the library directly from the repl?
@heath Do you have a link to the corda docs?
=> (require 'corda.core)
FileNotFoundException Could not locate corda/core__init.class or corda/core.clj on classpath. clojure.lang.RT.load (RT.java:463)
=> (import 'net.corda.client.jackson)
ClassNotFoundException net.corda.client.jackson java.net.URLClassLoader.findClass (URLClassLoader.java:382)
=> (import 'net.corda.core.concurrent.JacksonSupport)
ClassNotFoundException net.corda.core.concurrent.JacksonSupport java.net.URLClassLoader.findClass (URLClassLoader.java:382)
But there is a JacksonSupport
class in it.
=> (import 'net.corda.core.client.JacksonSupport)
ClassNotFoundException net.corda.core.client.JacksonSupport java.net.URLClassLoader.findClass (URLClassLoader.java:382)
net.corda.client.jackson.JacksonSupport
I believe
You need the full package name as well as the class name
=> (import 'net.corda.core.client.jackson.JacksonSupport)
ClassNotFoundException net.corda.core.client.jackson.JacksonSupport java.net.URLClassLoader.findClass (URLClassLoader.java:382)
Try (import '(net.corda.core.client.jackson JacksonSupport))
I believe?
=> (import '(net.corda.core.client.jackson JacksonSupport))
ClassNotFoundException net.corda.core.client.jackson.JacksonSupport java.net.URLClassLoader.findClass (URLClassLoader.java:382)
Are you running leiningen? You might get something informative out of running lein deps :tree
and searching for corda-related strings.
Seems like that import shoulda worked tho
Looks like the corda stuff wasn’t pulled down from the repo before, and you just downloaded everything when you ran lein deps :tree
— I think your import statement should work now?
I gotta run, good luck with that!
@heath so the thing is net.corda/corda
is some kind of example project or a runtime, you need specific parts of it like, net.corda/corda-core
and net.corda/corda-jackson
as lein deps
yeah i'm not sure why there is corda/corda jar, it has just 2 classes you able to import and run Capsule
and CordaCaplet
and they are in the default package, so you import them just by (import Capsule)
or (import CordaCaplet)
then run their main method
Hi there. I'm having recurrent problems with example apps and tutorial code not compiling because "Call[s] to clojure.core/refer-clojure did not conform to spec" - unfortunately I don't quite understand how to read the spec error messages and I can't seem to find any ns-forms that appear to be off syntax-wise. I've tried to read up on spec but I could not really gather what the messages try to tell me. Any hints on this maybe, some recommended reading?
@d.eltzner can you paste your code and error output?
also if there was no stack trace, the value of *e
Well I can post the spec, the trace is humongous and the code is from https://github.com/omnyway-labs/re-crud/tree/master/example-app
you can use the +
button by the input bar to share the trace
somewhere there's a :refer-clojure
in an ns form, with an :as
, which isn't valid
the code was written for 1.8 and I've got 1.9 installed, I figure this is a compatibility issue but again, I'm having a hard time reading up on that
it was never allowed inside refer-clojure
it silently did nothing once
now it's an error
oh that's probably right - best bet is probably to look for a newer figwheel plugin version
also probably change [com.cemerick/piggieback "0.2.1"]
to [cider/piggieback "0.4.1"]
if you read the stacktrace backwards, you see a chain of namespaces loading each other figwheel_sidecar.repl_api => figwheel_sidecar.system => figwheel_sidecar.repl => clojure.core.async
the relevant line in that stack above I think is clojure/core/async.clj:9:1
that was something fixed long ago so using an old version of core.async that can be updated
fixed here https://github.com/clojure/core.async/commit/2f87bc7c7d10cb7b0baafc86e08489d58fa87424 since core.async 0.3.442
it's probably safer @d.eltzner to update clojure.core.async alone, rather than risk changing the figwheel/piggieback deps
current version is 0.4.490
other libraries use it
and btw, those errors should be much better in Clojure 1.10
@d.eltzner jvm deps are transitive
you can normally only have one version of a dep, so you can make them use a newer one
lein deps :tree
would show you the full deps tree
lein deps :why org.clojure/core.async
will show you the path to that dep
Oh thats really cool!
Yup it was figwheel then. I don't quite get how I would "update core.async alone" though if it's a transitive dependency
the deps are depth-first, so be sure to add it before anything that uses it transitively in the list