Sorting 具有排序方式的Clojure NullPointerException
这是一个bug还是我可以用某种方式修复它?(当然,在我的实时代码中,相似度是计算出来的)Sorting 具有排序方式的Clojure NullPointerException,sorting,exception,clojure,Sorting,Exception,Clojure,这是一个bug还是我可以用某种方式修复它?(当然,在我的实时代码中,相似度是计算出来的) (排序依据:相似性>(对于[ob[:a:b:c][:object ob:similarity 0.0])) NullPointerException clojure.lang.Numbers.ops(Numbers.java:961) 使用Clojure 1.6.0,Fedora 20x64,标准版本 已添加 为什么我会失败,但在(我期望类似的)这一点上,我很好: user=>(排序依据:相似性>[{:形
(排序依据:相似性>(对于[ob[:a:b:c][:object ob:similarity 0.0]))
NullPointerException clojure.lang.Numbers.ops(Numbers.java:961)
使用Clojure 1.6.0,Fedora 20x64,标准版本
已添加
为什么我会失败,但在(我期望类似的)这一点上,我很好:
user=>(排序依据:相似性>[{:形状“圆”:相似性1.0}{:形状“正方形”:相似性0.5}{:形状“三角形”:相似性0.0}])
({:相似性1.0,:形状“圆形”}{:相似性0.5,:形状“方形”}{:相似性0.0,:形状“三角形”})
您不能通过关键字访问向量元素,只能通过它们的索引:
=>(获取[:相似度0.5]:相似度)
无
=>(获取[:相似度0.5]1)
0.5
因此,您应该改用hashmap:
=> (get {:similarity 0.5} :similarity)
0.5
下面是代码的外观:
(sort-by :similarity > (for [ob [:a :b :c]] {:object ob :similarity 0.0}))
不能通过关键字访问向量元素,只能通过其索引:
=>(获取[:相似度0.5]:相似度)
无
=>(获取[:相似度0.5]1)
0.5
因此,您应该改用hashmap:
=> (get {:similarity 0.5} :similarity)
0.5
下面是代码的外观:
(sort-by :similarity > (for [ob [:a :b :c]] {:object ob :similarity 0.0}))
不能通过关键字访问向量元素,只能通过其索引:
=>(获取[:相似度0.5]:相似度)
无
=>(获取[:相似度0.5]1)
0.5
因此,您应该改用hashmap:
=> (get {:similarity 0.5} :similarity)
0.5
下面是代码的外观:
(sort-by :similarity > (for [ob [:a :b :c]] {:object ob :similarity 0.0}))
不能通过关键字访问向量元素,只能通过其索引:
=>(获取[:相似度0.5]:相似度)
无
=>(获取[:相似度0.5]1)
0.5
因此,您应该改用hashmap:
=> (get {:similarity 0.5} :similarity)
0.5
下面是代码的外观:
(sort-by :similarity > (for [ob [:a :b :c]] {:object ob :similarity 0.0}))
我认为这是你的问题:
=> (map :similarity (for [ob [:a :b :c]] [:object ob :similarity 0.0]))
(nil nil nil)
=> (for [ob [:a :b :c]] [:object ob :similarity 0.0])
([:object :a :similarity 0.0] [:object :b :similarity 0.0] [:object :c :similarity 0.0])
我认为这是你的问题:
=> (map :similarity (for [ob [:a :b :c]] [:object ob :similarity 0.0]))
(nil nil nil)
=> (for [ob [:a :b :c]] [:object ob :similarity 0.0])
([:object :a :similarity 0.0] [:object :b :similarity 0.0] [:object :c :similarity 0.0])
我认为这是你的问题:
=> (map :similarity (for [ob [:a :b :c]] [:object ob :similarity 0.0]))
(nil nil nil)
=> (for [ob [:a :b :c]] [:object ob :similarity 0.0])
([:object :a :similarity 0.0] [:object :b :similarity 0.0] [:object :c :similarity 0.0])
我认为这是你的问题:
=> (map :similarity (for [ob [:a :b :c]] [:object ob :similarity 0.0]))
(nil nil nil)
=> (for [ob [:a :b :c]] [:object ob :similarity 0.0])
([:object :a :similarity 0.0] [:object :b :similarity 0.0] [:object :c :similarity 0.0])
使用REPL的一个优点是,当遇到这样的问题时,很容易计算子表达式。使用REPL的一个优点是,当遇到这样的问题时,很容易计算子表达式。使用REPL的一个优点是,当遇到这样的问题时,计算子表达式很容易。使用REPL的一个优点是,当遇到这样的问题时,计算子表达式很容易。请原谅我是Clojure的新手,但如果我不能做向量+键,为什么这样做:(添加到主要问题)@WorldsEndless尝试运行
(对于[ob[:a:b:c][:object ob:similarity 0.0])
在REPL中,你会看到它是不同的。然后将它与我的版本进行比较(对于[ob[:a:b:c]{:object ob:similarity 0.0})。请原谅我是Clojure的新手,但如果我不会做向量+键,为什么这会起作用:(添加到主要问题)@WorldsEndless尝试运行(对于[ob[:a:b:c][:object ob:similarity 0.0]))
在REPL中,你会看到它是不同的。然后将它与我的版本进行比较(对于[ob[:a:b:c]{:object ob:similarity 0.0})。请原谅我是Clojure的新手,但如果我不会做向量+键,为什么这会起作用:(添加到主要问题)@WorldsEndless尝试运行(对于[ob[:a:b:c][:object ob:similarity 0.0]))
在REPL中,你会看到它是不同的。然后将它与我的版本进行比较(对于[ob[:a:b:c]{:object ob:similarity 0.0})。请原谅我是Clojure的新手,但如果我不会做向量+键,为什么这会起作用:(添加到主要问题)@WorldsEndless尝试运行(对于[ob[:a:b:c][:object ob:similarity 0.0]))
在REPL中,您将看到它是不同的。然后将它与我的版本比较(对于[ob[:a:b:c]]{:object ob:similarity 0.0})
。