Domanda

Ho il codice seguente:

(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)
   )
 )

Ho un'altra funzione che passa un titolo, il contenuto e un timestamp UNIX alla funzione "post" sopra.blog_title e blog_url sono var definiti nella parte superiore del codice.Ho ordinato l'HTML per estetica, nel "codice reale" non è così.Lo sto facendo anche io

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

Se provo ad eseguire il codice ottengo un errore

java.lang.IllegalArgumentException 

Se rimuovo (Data.timestamp) il codice viene eseguito perfettamente, ma ho bisogno di quella funzione (Date.).

Ora, se in REPL lo faccio

(import 'java.util.Date)

Quindi definire una var con un timestamp

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

E poi copio semplicemente (let) in REPL e aggiusto le variabili nel codice originale per rappresentare piuttosto solo i diversi nomi di funzioni invece dei valori (poiché questo è REPL e le variabili, funzioni e valori che sono nel codice originale non esiste), in questo modo:

(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))

Ora il REPL mi dà:

<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

Ancora una volta, tutto è stato spostato in modo che fosse più facile da leggere, in REPL tutto viene visualizzato in un'unica grande stringa.

Il problema qui è che posso eseguire il codice in REPL e ottenere il valore di (Date.timestamp) e tutto funziona, ma quando lo eseguo all'interno di una funzione nel mio programma ottengo l'errore sopra menzionato.Apprezzerei se qualcuno potesse dirmi cosa mi manca qui.

È stato utile?

Soluzione

E' necessaria solo una piccola modifica:

(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)
   )
 )

Tuttavia, ti consiglio comunque di trovare un modo per passare il timestamp come un valore lungo anziché come una stringa.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top