У меня есть следующий код:
(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)
)
)
У меня есть еще одна функция, которая передает заголовок, содержимое и временную метку UNIX функции «post» выше. blog_title и blog_url определяются в начале кода. Я отсортировал HTML для эстетики, в «реальном коде» это не так. я тоже делаю
(import 'java.util.Date)
(use 'clojure.string)
Если я пытаюсь выполнить код, я получаю сообщение об ошибке
java.lang.IllegalArgumentException
Если я удаляю (Date. timestamp), код выполняется отлично, но мне нужна эта (Date.) функция.
Теперь, если в REPL я делаю
(import 'java.util.Date)
Затем определите переменную с отметкой времени
(def timestamp 1278854531000) ;; Just for pushing a var into (Date.) than just the number
А затем я просто копирую (let) в REPL и настраиваю vars в исходном коде, чтобы они просто представляли разные имена функций вместо значений (поскольку это REPL и vars, функции и значения, которые есть в исходном коде). не существует), чтобы было так:
(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. timestamp), и все работает, но когда я выполняю его внутри функции в своей программе, я получаю вышеупомянутую ошибку. Был бы признателен, если бы кто-нибудь сказал мне, что мне здесь не хватает.
(Date. (long timestamp))
- person Jonas   schedule 12.07.2010int
(например, то, которое вы поместили вtimestamp
Var), но не тогда, когда число действительно помещается вint
(посколькуDate
не имеет конструктор, принимающий одинint
). Возможно, вы захотите использоватьLong/valueOf
(это будет работать сint
s,long
s иString
s). - person Michał Marczyk   schedule 13.07.2010