在Clojure中:使用let函数但不在REPL中执行Java调用时出错

我有以下代码:

(defn post
  

(let [[innholdet tajm] [(str "<html> <head> <title>" title " :: " blog_title "</title></head> <body><h1>" title "</h1> <br/>" content "<br/><i>posted " (Date. timestamp) "</i> <br/><a href=\"" (str blog_url) "\">[main]</a> | <a href=\"" (str blog_url) "/" timestamp ".html\">[permalink]</a> </body></html>") (str timestamp".html")]] (spit tajm innholdet) ) )

我有另一个函数将标题,内容和UNIX时间戳传递给上面的函数“post”. blog_title和blog_url是在代码顶部定义的var.我已经为美学排序了HTML,在“真实代码”中,情况并非如此.我也在做

(import 'java.util.Date)
(use 'clojure.string)

如果我尝试执行代码,我会收到错误

java.lang.IllegalArgumentException 

如果我删除(日期.时间戳)代码执行完美,但我需要有(日期.)函数.

现在,如果在REPL我做

(import 'java.util.Date)

然后使用时间戳定义var

(def timestamp 1278854531000) ;; Just for pushing a var into (Date.) than just the number

然后我只是将(let)复制到REPL并调整原始代码中的变量而不是仅代表不同的函数名而不是值(因为这是REPL以及原始代码中的变量,函数和值)不存在),是这样的:

(let [[innholdet tajm] 
  [(str "<html>
         <head>
         <title>" (str "title") " :: " (str "blog_title") "</title>
         </head>
         <body><h1>" (str "title") "</h1><br/>" (str "content") "<br/>
         <i>posted " (Date. timestamp) "</i><br/>
         <a href=\"" (str "blog_url") "\">[main]</a> | 
         <a href=\"" (str "blog_url") "/" (str "1278854531000") ".html\">[permalink]</a></body></html>") 
         (str "1278854531000.html")]] 
           (println innholdet tajm))

现在REPL给了我:

<html>
<head>
<title>title :: blog_title</title>
</head>
<body>
<h1>title</h1><br/>content<br/>
<i>posted Sun Jul 11 15:22:11 CEST 2010</i><br/>
<a href="blog_url">[main]</a> | 
<a href="blog_url/1278854531000.html">[permalink]</a>
</body></html> 
1278854531000.html
nil

同样,所有内容都已移位,因此读取起来会更友好,在REPL中,所有内容都会出现在一个大字符串中.

这里的问题是我可以在REPL中执行代码并获取(Date.时间戳)的值,一切正常,但是当我在程序中的函数内执行它时,我得到上面提到的错误.如果有人能告诉我这里缺少什么,我将不胜感激.

最佳答案 只需进行一些小改动:

(defn post
  

(let [[innholdet tajm] [(str "<html> <head> <title>" title " :: " blog_title "</title></head> <body><h1>" title "</h1> <br/>" content "<br/><i>posted " (Date. **(Long/parseLong timestamp)**) "</i> <br/><a href=\"" (str blog_url) "\">[main]</a> | <a href=\"" (str blog_url) "/" timestamp ".html\">[permalink]</a> </body></html>") (str timestamp".html")]] (spit tajm innholdet) ) )

但是,我仍然建议你找出一种方法来传递时间戳作为long而不是字符串.

点赞