Thank you!
On Nov 30, 2012, at 11:35 PM, dmiller wrote:
> Patched in master branch.
>
> Clojure 1.5.0-master-SNAPSHOT
> user=>
> user=> (defn bar [^Double d] d)
> #'user/bar
> user=> (defn baz [^System.Double d] d)
> #'user/baz
> user=> (bar 1.2)
> 1.2
> user=> (baz 1.2)
> 1.2
> user=> (defprot
Patched in master branch.
Clojure 1.5.0-master-SNAPSHOT
user=>
user=> (defn bar [^Double d] d)
#'user/bar
user=> (defn baz [^System.Double d] d)
#'user/baz
user=> (bar 1.2)
1.2
user=> (baz 1.2)
1.2
user=> (defprotocol FP (foo [_]))
FP
user=> (extend-protocol FP System.Double (foo [d] d))
nil
user=
user=> (defn f [^Double x] x)
#'user/f
user=> (defn g [^double x] x)
#'user/g
user=> (f 1.0)
2.15078317008181E-316# GASP!
user=> (g 1.0)
1.0# CROWD APPLAUDS!
As you can see, there is a workaround: use ^double, not ^Double. This
I have discovered some odd behavior when type-hinting fns with
^System.Double:
user=> (defn bar [^System.Double d] d)
#'user/bar
user=> (bar 1.2)
2.35293190771409E-316
user=> (bar 1)
2.35069794048985E-316
The same behavior occurs when extending double via extend-protocol or
extend-type:
user=>