Clojure警告反思和类型提示

时间:2011-01-09 17:11:00

标签: clojure type-hinting

在下面的代码中,我收到了反思警告:

(ns com.example
  (:import
    [org.apache.commons.cli CommandLine Option Options PosixParser]))

(def *help-option* "help")
(def *host-option* "db-host")

(def *options*
  (doto (Options.)
    (.addOption "?" *help-option* false "Show this usage information")
    (.addOption "h" *host-option* true "Name of the database host")))

(let
  [^CommandLine command-line (.. (PosixParser.)
                               (parse *options* (into-array String args)))

   db-host (.getOptionValue command-line "h")]  ; WARNING HERE ON .getOptionValue
  ; Do stuff with db-host
)

我在command-line上有一个类型提示。为什么要警告?

我在OS X 10.6.6(Apple VM)上使用Clojure 1.2。

我认为我(.addOption ...)上收到警告,因为编译器知道(Options.)org.apache.commons.cli.Options)

2 个答案:

答案 0 :(得分:1)

我发现了问题。由于*host-option* var,Clojure无法确定要调用的方法。如果我将var def更改为(def ^String *host-option* "db-host"),它就会消除警告。

我更新了我的问题,以显示我在代码中实际拥有的def

答案 1 :(得分:0)

在clojure 1.2中,每个函数的返回类型都是对象。您可能已经考虑过这个但是警告可能来自命令行的.getOptionValue方法返回的值