Skip to content

Instantly share code, notes, and snippets.

@timmc
Last active August 29, 2015 14:06
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save timmc/77dd67b6b4af7ab4afb7 to your computer and use it in GitHub Desktop.
Save timmc/77dd67b6b4af7ab4afb7 to your computer and use it in GitHub Desktop.
Why does pst drop the top exception here?
;; Calling .map incorrectly inside an rx fn gives this mysterious REPL output:
(-> (.map (rx.Observable/just 5)
(rx.lang.clojure.interop/fn [_]
(.map (rx.lang.clojure.interop/fn* inc) ;; backward args
(rx.Observable/just 5))))
(.toBlocking)
(.first ))
OnNextValue OnError while emitting onNext value: Long.class rx.exceptions.OnErrorThrowable.addValueAsLastCause (OnErrorThrowable.java:98)
;; Capturing the exception using .materialize shows the syntactic error correctly:
(-> (.map (rx.Observable/just 5)
(rx.lang.clojure.interop/fn [_]
(.map (rx.lang.clojure.interop/fn* inc) ;; backward args
(rx.Observable/just 5))))
(.materialize)
(.toBlocking)
(.first ))
#<Notification [rx.Notification@f430b6fb OnError No matching method found: map for class rx.lang.clojure.interop$fn_STAR_$reify__88]>
;; pst agrees with the original exception output:
(pst)
OnNextValue OnError while emitting onNext value: Long.class
rx.exceptions.OnErrorThrowable.addValueAsLastCause (OnErrorThrowable.java:98)
rx.internal.operators.OperatorMap$1.onNext (OperatorMap.java:56)
rx.Observable$3.call (Observable.java:1551)
rx.Observable$3.call (Observable.java:1546)
rx.Observable$2.call (Observable.java:159)
rx.Observable$2.call (Observable.java:155)
rx.Observable$2.call (Observable.java:159)
rx.Observable$2.call (Observable.java:155)
rx.Observable$2.call (Observable.java:159)
rx.Observable$2.call (Observable.java:155)
rx.Observable$2.call (Observable.java:159)
rx.Observable$2.call (Observable.java:155)
nil
;; But good ol' printStackTrace shows the truth:
(.printStackTrace *e)
java.lang.IllegalArgumentException: No matching method found: map for class rx.lang.clojure.interop$fn_STAR_$reify__88
at clojure.lang.Reflector.invokeMatchingMethod(Reflector.java:53)
at clojure.lang.Reflector.invokeInstanceMethod(Reflector.java:28)
at adhoc.main$eval2858$fn__2859.invoke(form-init6984411609672063511.clj:1)
at rx.lang.clojure.interop$fn_STAR_$reify__88.call(interop.clj:61)
at rx.internal.operators.OperatorMap$1.onNext(OperatorMap.java:54)
at rx.Observable$3.call(Observable.java:1551)
at rx.Observable$3.call(Observable.java:1546)
at rx.Observable$2.call(Observable.java:159)
at rx.Observable$2.call(Observable.java:155)
at rx.Observable$2.call(Observable.java:159)
at rx.Observable$2.call(Observable.java:155)
at rx.Observable$2.call(Observable.java:159)
at rx.Observable$2.call(Observable.java:155)
at rx.Observable$2.call(Observable.java:159)
at rx.Observable$2.call(Observable.java:155)
at rx.Observable$2.call(Observable.java:159)
at rx.Observable$2.call(Observable.java:155)
at rx.Observable.subscribe(Observable.java:6922)
at rx.internal.operators.BlockingOperatorToIterator.toIterator(BlockingOperatorToIterator.java:49)
at rx.observables.BlockingObservable.getIterator(BlockingObservable.java:151)
at rx.observables.BlockingObservable$2.iterator(BlockingObservable.java:435)
at rx.observables.BlockingObservable.single(BlockingObservable.java:348)
at rx.observables.BlockingObservable.first(BlockingObservable.java:165)
at adhoc.main$eval2858.invoke(form-init6984411609672063511.clj:1)
at clojure.lang.Compiler.eval(Compiler.java:6619)
at clojure.lang.Compiler.eval(Compiler.java:6582)
at clojure.core$eval.invoke(core.clj:2852)
at clojure.main$repl$read_eval_print__6588$fn__6591.invoke(main.clj:259)
at clojure.main$repl$read_eval_print__6588.invoke(main.clj:259)
at clojure.main$repl$fn__6597.invoke(main.clj:277)
at clojure.main$repl.doInvoke(main.clj:277)
at clojure.lang.RestFn.invoke(RestFn.java:1523)
at clojure.tools.nrepl.middleware.interruptible_eval$evaluate$fn__762.invoke(interruptible_eval.clj:62)
at clojure.lang.AFn.applyToHelper(AFn.java:159)
at clojure.lang.AFn.applyTo(AFn.java:151)
at clojure.core$apply.invoke(core.clj:617)
at clojure.core$with_bindings_STAR_.doInvoke(core.clj:1788)
at clojure.lang.RestFn.invoke(RestFn.java:425)
at clojure.tools.nrepl.middleware.interruptible_eval$evaluate.invoke(interruptible_eval.clj:46)
at clojure.tools.nrepl.middleware.interruptible_eval$interruptible_eval$fn__804$fn__807.invoke(interruptible_eval.clj:178)
at clojure.tools.nrepl.middleware.interruptible_eval$run_next$fn__797.invoke(interruptible_eval.clj:147)
at clojure.lang.AFn.run(AFn.java:24)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
at java.lang.Thread.run(Thread.java:744)
Caused by: rx.exceptions.OnErrorThrowable$OnNextValue: OnError while emitting onNext value: Long.class
at rx.exceptions.OnErrorThrowable.addValueAsLastCause(OnErrorThrowable.java:98)
at rx.internal.operators.OperatorMap$1.onNext(OperatorMap.java:56)
... 40 more
nil
;; $ lein version
;; Leiningen 2.4.3 on Java 1.7.0_51 Java HotSpot(TM) 64-Bit Server VM
;; => *clojure-version*
;; {:major 1, :minor 5, :incremental 1, :qualifier nil}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment