Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/321.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Clojure中:执行Java调用时出错,let在函数中,而不是在REPL中_Java_Clojure_Lisp_Read Eval Print Loop_Illegalargumentexception - Fatal编程技术网

在Clojure中:执行Java调用时出错,let在函数中,而不是在REPL中

在Clojure中:执行Java调用时出错,let在函数中,而不是在REPL中,java,clojure,lisp,read-eval-print-loop,illegalargumentexception,Java,Clojure,Lisp,Read Eval Print Loop,Illegalargumentexception,我有以下代码: (defn post [title content timestamp] (let [[innholdet tajm] [(str "<html> <head> <title>" title " :: " blog_title "</title></head> <body><h1>" ti

我有以下代码:

(defn post
  [title content timestamp]
    (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)
   )
 )
如果我试图执行代码,我会得到一个错误

java.lang.IllegalArgumentException 
如果我删除了(Date.timestamp),代码就会完美地执行,但我需要有(Date.)函数

现在,如果我回答是这样的话

(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))
(let[[innholdt tajm]
[(str)”
(str“title”):(str“blog_title”)
“(str“title”)”
“(str“content”)”
已发布“(日期时间戳)”
| ") (str“1278854531000.html”)]] (println Innholdt 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

标题::博客标题
标题
内容
发布日期:2010年7月11日15:22:11 CEST
| 1278854531000.html 无
同样,所有的内容都被改变了,以便阅读起来更加友好,在REPL中,所有内容都以一个大字符串显示


这里的问题是,我可以在REPL中执行代码并获得(Date.timestamp)的值,然后一切都解决了,但是当我在程序中的一个函数中执行它时,我会得到上面提到的错误。如果有人能告诉我这里缺少什么,我将不胜感激。

只需要一点小小的改变:

(defn post
  [title content timestamp]
    (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)
   )
 )
(defn post
[标题内容时间戳]
(让[Innholdt tajm]
[(str)”
“标题”:“博客标题”
“标题”

“内容”
已发布“(日期。**(长/长时间戳)**)”
“”(str timestamp“.html”)]] (斯皮特泰姆酒店) ) )

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

您是否尝试转换为long
(Date.(long timestamp))
@Jonas它导致:“线程中的异常”main“java.lang.ClassCastException:java.lang.String不能转换为java.lang.Number”和“原因:java.lang.ClassCastException:java.lang.String不能转换为clojure.lang.RT.longCast(RT.java:961)”中的java.lang.Number@那么你的参数是一个字符串而不是一个数字。您需要将字符串解析为一个数字,例如使用Long/parselong我的经验是,如果传递的数字足够大,不能放入
int
(例如您放入
时间戳
Var中的数字),则上面定义的函数可以工作,但当数字不适合
int
(因为<代码>日期<代码>没有一个构造函数采用单一的<代码> int <代码>)。您可能需要考虑使用<代码>长/值> <代码>(它将与<代码> int <代码> >,<代码>长< //>代码>和代码>字符串< /代码> s。
(defn post
  [title content timestamp]
    (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)
   )
 )