शायद तुम जैसे कुछ मतलब है:
-module(reclist).
-export([empty_state/0, some_state/0,
add_client/1, del_client/1,
get_clients/1]).
-record(state,
{
clients = [] ::[pos_integer()],
dbname ::char()
}).
empty_state() ->
#state{}.
some_state() ->
#state{
clients = [1,2,3],
dbname = "QA"}.
del_client(Client) ->
S = some_state(),
C = S#state.clients,
S#state{clients = lists:delete(Client, C)}.
add_client(Client) ->
S = some_state(),
C = S#state.clients,
S#state{clients = [Client|C]}.
get_clients(#state{clients = C, dbname = _D}) ->
C.
टेस्ट:
1> reclist:empty_state().
{state,[],undefined}
2> reclist:some_state().
{state,[1,2,3],"QA"}
3> reclist:add_client(4).
{state,[4,1,2,3],"QA"}
4> reclist:del_client(2).
{state,[1,3],"QA"}
::[pos_integer()]
मतलब यह है कि क्षेत्र के प्रकार के सकारात्मक पूर्णांक मानों की सूची, 1
से शुरू होता है; यह विश्लेषण उपकरण dialyzer
के लिए संकेत है, जब यह टाइप चेकिंग करता है।
Erlang भी आप रिकॉर्ड पर पैटर्न मिलान का उपयोग की अनुमति देता है:
5> reclist:get_clients(reclist:some_state()).
[1,2,3]
अतिरिक्त पठन:
@JUST मेरा सही विकल्प answer मुझे याद दिलाता है कि मुझे प्यार है कि कैसे हास्केल डेटा प्रकार में फ़ील्ड के मान प्राप्त करने के बारे में जाता है।
data Car = Car {company :: String
,model :: String
,year :: Int
} deriving (Show)
यह कार्यों company
, model
और year
, डेटा प्रकार में है कि देखने क्षेत्रों बनाता है:
यहाँ एक डेटा प्रकार, Learn You a Haskell for Great Good! से चोरी, जो रिकॉर्ड वाक्य रचना का लाभ उठाता है की एक परिभाषा है। हम पहले एक नई कार बनाने:
ghci> Car "Toyota" "Supra" 2005
Car {company = "Toyota", model = "Supra", year = 2005}
या, रिकॉर्ड वाक्य रचना (खेतों के आदेश कोई फर्क नहीं पड़ता) का उपयोग:
ghci> Car {model = "Supra", year = 2005, company = "Toyota"}
Car {company = "Toyota", model = "Supra", year = 2005}
ghci> let supra = Car {model = "Supra", year = 2005, company = "Toyota"}
ghci> year supra
2005
हम भी पैटर्न मिलान का उपयोग कर सकते हैं:
ghci> let (Car {company = c, model = m, year = y}) = supra
ghci> "This " ++ C++ " " ++ m ++ " was made in " ++ show y
"This Toyota Supra was made in 2005"
मुझे याद है कि एरलांग में हास्केल के रिकॉर्ड सिंटैक्स के समान कुछ लागू करने का प्रयास किया गया था, लेकिन यह सुनिश्चित नहीं है कि वे सफल रहे हैं या नहीं।
कुछ पदों, इन प्रयासों के विषय में:
ऐसा नहीं है कि LFE मैक्रो, जो क्या योजना प्रदान करता है के समान हैं का उपयोग करता है (Racket, उदाहरण के लिए), जब आप कुछ संरचना का एक नया मान बनाने के लिए चाहते हैं लगता है:
> (define-struct car (company model year))
> (define supra (make-car "Toyota" "Supra" 2005))
> (car-model supra)
"Supra"
मुझे आशा है कि हम भविष्य में हास्केल रिकॉर्ड सिंटैक्स के करीब कुछ होगा, जो वास्तव में व्यावहारिक रूप से उपयोगी और आसान होगा।
ewps, यह 'डायलज़र' है। Erlang [रिकॉर्ड्स] पर अधिक (http://www.erlang.org/doc/programming_examples/records.html)। –
ओह, यह 'क्लाइंट = [] :: [pos_integer()], ' –
होना चाहिए था, क्या आप अपने 2600 क्रेडिट पॉइंट्स के साथ अपडेट करने के लिए अपनी पोस्ट संपादित नहीं कर सकते? – ndim