Как мне избавиться от этого предупреждения об отражении в моем исходном коде, который имеет класс gen? - PullRequest
1 голос
/ 17 сентября 2011
 (ns scratch.fastflip
   (:gen-class
    :extends java.util.Random
    :implements clojure.lang.IFn))

 (defn -invoke [^java.util.Random this]
   (.next this 1))

При загрузке файла я получаю предупреждение:

 ;scratch.coin=> Reflection warning, /home/user/scratch/src/scratch/fastflip.clj:8 - call to next can't be resolved.
 #'scratch.fastflip/-invoke

Примечание. Я хочу избавиться от предупреждения путем устранения отражения, а не путем установки механизма предупреждения в значение false.

1 Ответ

2 голосов
/ 17 сентября 2011

Если вы используете 1.3, это возможно потому, что next принимает целое, а не длинное, а 1 - целое. Но вы уверены, что next это то, что вы хотите позвонить? Если вы делаете бросание монет, я бы просто использовал nextInt(2), так как next выглядит как внутренняя реализация.

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

(ns test-genclass.core
  (:gen-class
   :extends java.util.Random
   :implements [clojure.lang.IFn]
   :exposes-methods {next inner}))

(set! *warn-on-reflection* true)

(defn -invoke [^test_genclass.core this]
  (.inner this 1))

(defn -main [& args]
  ((test_genclass.core.)))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...