Clojure предупреждение на отражение и подсказки типа - PullRequest
1 голос
/ 09 января 2011

В следующем коде я получаю предупреждение об отражении:

(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. Почему предупреждение?

Я использую Clojure 1.2 в OS X 10.6.6 (Apple VM).

Я предполагаю, что не получает предупреждение о (.addOption ...), потому что компилятор знает, что (Options.) является org.apache.commons.cli.Options).

Ответы [ 2 ]

1 голос
/ 09 января 2011

Я нашел проблему.Clojure не может определить метод для вызова из-за *host-option* var.Если я изменю var def на (def ^String *host-option* "db-host"), это избавится от предупреждения.

Я обновил свой вопрос, чтобы показать def, который у меня действительно был в моем коде.

0 голосов
/ 09 января 2011

в слове 1.2 возвращаемый тип каждой функции - объект.Возможно, вы уже подумали об этом, но, возможно, предупреждение исходит из значения, возвращаемого методом .getOptionValue командной строки

...