【问题标题】:Is it possible to cast the Elapsed Time function to Integer?是否可以将经过时间函数转换为整数?
【发布时间】:2012-04-19 16:04:10
【问题描述】:

我有以下功能:

(def elapsedtime (with-out-str (time (run-my-function))))

我想知道是否可以只存储时间的整数值,因为我现在只能存储一个字符串......

有什么建议吗? 非常感谢

更新

So I did use this:
  (defmacro nsecs
  [expr]
  `(let [start# (. System (nanoTime))]
     ~expr
     (- (. System (nanoTime)) start#)))

然后修改这个:

(def elapsedtime (nsecs (run-my-function argument1 argument2)))

但是不起作用,我做错了什么?

“线程“AWT-EventQueue-0”中的异常 java.lang.IllegalArgumentException:传递给的参数 (1) 数量错误:main$fn--105$nsecs”

【问题讨论】:

  • 我看到您对 nsecs 的定义与 Jan 的不同。也许你应该尝试使用 Jan's。它对我有用。
  • 我也尝试了他的版本,但没有任何改变。问题在于参数的数量。即使我做“(def elapsedtime(nsecs(+ 1 1)))”它也不起作用......奇怪
  • 你在什么环境下运行它?您能否在不使用 Clojure 代码的其余部分的情况下从命令行启动 REPL,并检查宏是否存在相同的问题?

标签: string time casting clojure integer


【解决方案1】:

我们不从字符串中提取这个值,而是看一下time macro的来源。

(defmacro time
  "Evaluates expr and prints the time it took.  Returns the value of expr."
  {:added "1.0"}
  [expr]
  `(let [start# (. System (nanoTime))
         ret# ~expr]
     (prn (str "Elapsed time: "
               (/ (double (- (. System (nanoTime)) start#)) 1000000.0) " msecs"))
     ret#))

使用它作为新宏的基础,返回用于评估给定表达式的纳秒数。

(defmacro nsecs
  [expr]
  `(let [start# (. System (nanoTime))]
     ~expr
     (- (. System (nanoTime)) start#)))

【讨论】:

  • 您好,感谢您的建议,但我现在遇到此错误:“线程中的异常“AWT-EventQueue-0”java.lang.IllegalArgumentException:传递给的 args (1) 数量错误:main $fn--105$nsecs" 你能看看问题更新吗?还是非常感谢
【解决方案2】:

DefMacro 解决方案不适合我,所以我使用了这个过滤解决方案:

(filter #(#{\0,\1,\2,\3,\4,\5,\6,\7,\8,\9,\.} %) my-double-number)

返回的值正是我想要的。无论如何,感谢您的建议和您的时间。雪儿

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-08-16
    • 2012-02-12
    • 2022-06-14
    • 1970-01-01
    • 2017-04-18
    • 1970-01-01
    • 2023-03-14
    • 1970-01-01
    相关资源
    最近更新 更多