如何输入提示

我将如何输入提示以摆脱剩余的反射电话?

(def B 
     (amap ^"[[D" A i ^"[[D" B 
          (amap ^doubles (aget A (int i)) j ^doubles row 
             (* 2 (aget row (int j))))))

还有两个反射电话,但我不知道如何摆脱它们。


您不会显示完整的代码或反射警告,但如果它们是我认为的那样,则需要:

  • 提示A: (def ^"[[D" A ...)无论你在哪里定义它
  • 将最内层表达式的返回值转换为double (double (* 2 ...))
  • 提出这些修复的过程是在宏上执行宏展开,运行该版本,查看导致反射警告的表达式,修复它们,并希望可以将提示改进为原始宏,在这种情况下可能。 我仍然建议更直接的解决方案。


    恕我直言,这是更容易做没有amap宏:

    (set! *warn-on-reflection* true)
    (def ^"[[D" A (into-array [(double-array [0 1 2]) (double-array [2 3 4])]))
    
    (def ^"[[D" B (into-array (map aclone A))) ; aclone is shallow
    (dotimes [i (alength B)]
      (let [^doubles row (aget B i)]
        (dotimes [j (alength row)]
          (aset row j (double (* 2 (aget row j)))))))
    
    (doseq [row B]
      (prn (vec row)))
    

    这个页面(最后)提供了关于类型提示的很好的信息:http://clojure.org/java_interop。 它建议使用eg(let [n(int)])而不是^ Integer等,这也使得代码更具可读性。 请注意,互联网上的很多资料似乎都是针对较早版本的Clojure,而您在1.2中需要较少的提示。

    链接地址: http://www.djcxy.com/p/48097.html

    上一篇: How to type hint

    下一篇: Which simple document management system?