2014-04-18 9 views
5

defstruct non è supportato in ClojureScript - sembrerebbe essere di progettazione. Ora può darsi che questa sia effettivamente una parte deprecata del linguaggio Clojure, e i progettisti di ClojureScript sperano solo che tutti siano andati avanti. (Ma questa è la mia speculazione).Qual è stato il ragionamento alla base di ClojureScript che non richiede la defstruzione di Clojure?

La mia domanda è: Qual è stato il ragionamento alla base di ClojureScript che non richiede la defstruzione di Clojure?

+0

Questo * è * efficacemente deprecato nella lingua, in favore di 'defrecord': [defstruct] (http://clojuredocs.org/clojure_core/clojure.core/defstruct). Dovremmo andare avanti in (Clojure basato su JVM). Mi aspetterei che Clojurescript fosse lo stesso. – Mars

+0

Grande - aggiungilo come risposta con un riferimento e lo contrassegnerò come risposta. – hawkeye

risposta

5

defstructè efficacemente deprecato nel linguaggio, a favore di defrecord. Dovremmo andare avanti in Clojure (basato su JVM), quindi mi aspetto che Clojurescript sia lo stesso. Vedere quanto segue:

Clojure: data structures: "Nota: la maggior parte degli usi di StructMaps sarebbe ora meglio servita dai record."

ClojureDocs: defstruct commento di steveminer: "Le strutture sono obsolete. Utilizza invece i record. Visualizza defrecord."

Il prossimo The Joy of Clojure, 2a ed. (edizione prerelease V9) di Fogus e Houser afferma: "Con l'avvento di defrecord, la necessità di costruire strutture è stata quasi eliminata, e quindi le strutture non sono trattate in questo libro". (p 322)

Si noti inoltre che Programmazione Clojure, 2a ed. di Halloway e Bedra copre lo defrecord ma non lo defstruct (sebbene ci siano alcune citazioni passeggere di strutture, forse lasciate accidentalmente dal 1 ° ed.).

Immagino che tutte le persone fantastiche usino lo defrecord in questi giorni. :-)

Alex Miller's answer a "Dove dovrei usare la deframeria in clojure?" ha una bella discussione sui vantaggi (e gli svantaggi) di defrecord, anche se non lo fa, principalmente, confrontandolo con defstruct.

+0

Inoltre, in JS la distinzione tra gli oggetti (come nelle istanze di una classe) e le hashmap a forma libera è sfocata. Tranne che per scopi di ottimizzazione, immagino. – jforberg

Problemi correlati