2012-03-19 12 views
5

Vorrei sapere qual è la differenza esatta tra uno snippet di classe e uno snippet di oggetto in ascensore.Differenza tra uno snippet di una classe e uno snippet di un oggetto

Se ho

class Foo { 
    var a: String 
    def render(n:NodeSeq) = { 
    <h3> you chose {a} </h3> 
    } 
} 

e

object Bar { 
    var b: String 
    def render(n:NodeSeq) = { 
    <h3> you chose {b} </h3> 
    } 
} 

Qual è la differenza concreta tra di loro, fare a e b hanno un comportamento diverso. In simply lift si dice che

In questo caso, il frammento è un singoletto oggetto perché non accetta parametri costruttore e senza istanza variabled.

Quindi cosa significa che per ogni utente, Bar sarà lo stesso?

So che si tratta di una domanda noob, tuttavia ho bisogno di essere molto chiaro su questo e non combino bene la differenza tra oggetti e classi nei frammenti.

risposta

8

Vedere this page.

Fondamentalmente, verrà creata una nuova istanza di Foo per ogni richiesta http (quindi ce ne saranno molte allo stesso tempo), ma solo una istanza di Bar sarà sempre presente allo stesso tempo.

+0

Grazie, è esattamente il piccolo suggerimento di cui avevo bisogno! –

-2

Un oggetto è un'istanza di una classe. In questo caso puoi semplicemente definire un oggetto immediatamente. Diciamo C++/Java ecc. Devi prima creare una classe e poi istanziarla. Semplifica, ad esempio, quando è necessario creare una classe singleton, che è necessario eseguire una sorta di modello di progettazione da gestire in altri linguaggi orientati agli oggetti che non supportano il costrutto dell'oggetto.

Per differenziare ulteriormente i due consideriamo la classe il progetto di una casa e l'oggetto la casa reale.

+0

Ciao, capisco il concetto di oggetto e classe, è solo che, applicato a frammenti e liftweb, mi sto perdendo in ciò che l'utente ottiene. –

+0

Non sono sicuro di seguirlo. Supponendo che hai incollato tutto il codice pertinente, questa è la differenza tra i due. Uno che devi istanziare per usare, e l'altro no. Si comporterebbero in modo diverso perché le funzioni sono definite in modo diverso. Ma sì, ogni accesso a Bar chiamerebbe lo stesso codice. È un singleton. Chiamare lo stesso metodo su due diverse istanze di Foo eseguirà anche lo stesso codice, solo con diversi riferimenti "this" –

Problemi correlati