在下面的代码中,我收到了反思警告:
(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)
。
答案 0 :(得分:1)
我发现了问题。由于*host-option*
var,Clojure无法确定要调用的方法。如果我将var def更改为(def ^String *host-option* "db-host")
,它就会消除警告。
我更新了我的问题,以显示我在代码中实际拥有的def
。
答案 1 :(得分:0)
在clojure 1.2中,每个函数的返回类型都是对象。您可能已经考虑过这个但是警告可能来自命令行的.getOptionValue方法返回的值