2012-03-19 22 views
5

Chciałbym wiedzieć, jaka jest dokładna różnica między urywkiem klasy a fragmentem obiektu w wyciągu.Różnica między fragmentem klasy a fragmentem obiektu

Jeśli mam

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

i

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

Jaka jest różnica między nimi beton, zrobić a i b mają różne zachowania. W simply lift jest powiedziane, że

W tym przypadku fragment jest Singleton obiektu, ponieważ nie ma żadnych parametrów konstruktora i nie ma instancji variabled.

Czy to oznacza, że ​​dla każdego użytkownika, Bar będzie taki sam?

Wiem, że jest to pytanie typu "noob", jednak muszę jasno o tym powiedzieć i nie pasuję do różnicy między obiektami i klasami w opisach.

Odpowiedz

8

Zobacz this page.

Zasadniczo, dla każdego żądania http zostanie utworzona nowa instancja Foo (więc będzie wiele istniejących jednocześnie), ale w tym samym czasie będzie istniało tylko jedno wystąpienie paska.

+0

Dzięki, to jest właśnie ta mała podpowiedź, której potrzebowałem! –

-2

Obiekt jest instancją klasy. W tym przypadku możesz po prostu zdefiniować obiekt od razu. W powiedzmy C++/Java itp. Musisz najpierw stworzyć klasę, a następnie ją utworzyć. Upraszcza to, gdy trzeba utworzyć klasę singleton, która będzie wymagała wykonania pewnego rodzaju wzorca projektowego w celu obsługi innych języków zorientowanych obiektowo, które nie obsługują konstrukcji obiektu.

Aby dalej rozróżnić dwie, należy rozważyć klasę projektu domu i obiektu rzeczywistego domu.

+0

Witam, rozumiem pojęcie obiektu i klasy, po prostu stosuje się do fragmentów i liftweb, gubię się w tym, co otrzymuje użytkownik. –

+0

Nie jestem pewien, czy podążam. Zakładając, że wkleiłeś cały odpowiedni kod, to jest różnica między tymi dwoma. Trzeba je utworzyć, a inne nie. Zachowują się inaczej, ponieważ funkcje są zdefiniowane inaczej. Ale tak, każdy dostęp do Baru wywoływałby ten sam kod. To singleton. Wywołanie tej samej metody na dwóch różnych instancjach Foo również uruchomi ten sam kod, tylko z różnymi "tymi" referencjami. –