Normalnie symbole Scala mogą być traktowane jako unikatowy identyfikator, który zawsze będzie taka sama. Każdy symbol, który jest identyczny w sensie lexi-graficznym, odnosi się do dokładnie tej samej przestrzeni pamięci. Z punktu widzenia Scali nie ma nic wyjątkowego.
Jednakże, Dispatch-Json wykrywa symbole, dzięki którym są one ekstraktorami właściwości JSON. Aby zobaczyć kod odpowiedzialny za sutkowanie, sprawdź kod SymOp class i resztę kodu JsonExtractor.scala.
Załóżmy napisać kod, który rozwiązuje ten problem patrzysz, a następnie analizować, co się dzieje:
trait ExtUserProps extends UserProps with Js {
val friends_count = 'friends_count ! num
}
object ExtUser extends ExtUserProps with Js
val good_stuff = for {
item <- http(Status("username").timeline)
msg = Status.text(item)
user = Status.user(item)
screen_name = ExtUser.screen_name(user)
friend_count = ExtUser.friends_count(user)
} yield (screen_name, msg, friend_count)
Pierwszą rzeczą, którą robimy rozszerza cechę UserProps w module Dispatch-Twitterze daj mu ekstraktor friends_count
, a następnie definiując obiekt, którego możemy użyć, aby uzyskać dostęp do tego ekstraktora. Ponieważ ExtUserProps rozszerza UserProps, co również rozszerza Js, otrzymujemy metodę sym_add_operators
w zakresie, który przekształca nasz symbol 'friends_count
w klasę przypadków SymOp. Następnie wywołujemy metodę na tym SymOp, do którego następnie przekazujemy Extractor num
do, który tworzy ekstraktor, który szuka właściwości "friends_count" na obiekcie JSON, a następnie analizuje go jako liczbę przed powrotem. Trochę się tam dzieje z tak małym kawałkiem kodu.
Następna część programu jest po prostu dla zrozumienia, która wywołuje na osi czasu Twittera użytkownika i przetwarza go na JsObjects, które reprezentują każdy element statusu, stosujemy ekstraktor Status.text
do wyciągnięcia komunikatu statusu. Następnie robimy to samo, aby wyciągnąć użytkownika. Następnie usuwamy parametr screen_name i friend_count z użytkownika JsObject, a na końcu otrzymujemy Tuple3 z wszystkimi właściwościami, których szukaliśmy. Zostaje nam wtedy lista [Tuple3 [String, String, BigDecimal]], którą możesz następnie powtórzyć, aby wydrukować lub zrobić cokolwiek z.
Mam nadzieję, że niektóre rzeczy się poprawią. Biblioteka Dispatch jest bardzo ekspresyjna, ale może być trochę trudna do owinięcia głowy, ponieważ używa wielu sztuczek Scala, których ktoś dopiero uczący się Scali nie otrzyma od razu. Ale nie przestawaj kręcić i grać, a także przyglądać się testom i kodowi źródłowemu, a zobaczysz, jak tworzyć wydajne DSL-y używając Scali.
Odpowiedź zależy * całkowicie * od biblioteki/interfejsu API, którego używasz, ale nie podano tego. –
Korzystam z biblioteki HTTP wysyłek scala –