В Clojure: ошибка, выполняющая Java Call с пусть внутри функции, но не в REPL

StackOverflow https://stackoverflow.com/questions/3231244

Вопрос

У меня есть следующий код:

(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 - var, определенный в верхней части кода. Я сортировал HTML для эстетики, в «Real Code» это не так. Я также делаю

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

Если я попытаюсь выполнить код, я получаю ошибку

java.lang.IllegalArgumentException 
.

Если я удалю (дата. Timestamp) Код выполняется идеально, но мне нужно иметь это (дата.) Функция.

Теперь, если в reft я делаю

(import 'java.util.Date)
.

Затем определите VAR с временем метки

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

, а затем я просто копирую (пусть) в reply и отрегулируйте vars в исходном коде, чтобы просто представлять различные функции имена вместо значений (поскольку это refl и 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))
.

Теперь reft дает мне:

<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 и получить значение (дата. 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)
   )
 )
.

Тем не менее, я бы порекомендовал бы вы понять способ пройти в меток времени в течение длительного времени вместо строки.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top