Thông thường, biểu tượng Scala có thể được coi như là một định danh duy nhất mà sẽ luôn luôn giống nhau. Mỗi biểu tượng giống hệt nhau về mặt đồ họa đều đề cập đến cùng một không gian bộ nhớ chính xác. Không có gì khác đặc biệt về họ từ quan điểm của Scala.
Tuy nhiên, Dispatch-Json pimps ra các biểu tượng khiến chúng trở thành trình giải nén thuộc tính JSON. Để xem mã chịu trách nhiệm cho việc bẻ cong, hãy xem SymOp class và phần còn lại của mã JsonExtractor.scala.
Hãy viết một số mã mà giải quyết vấn đề bạn đang xem xét và sau đó phân tích những gì đang xảy ra:
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)
Việc đầu tiên mà chúng tôi đang làm là mở rộng các đặc điểm UserProps trong module văn-Twitter để cung cấp cho nó một bộ giải nén friends_count
và sau đó xác định một đối tượng ExtUser
mà chúng ta có thể sử dụng để truy cập vào bộ giải nén đó. Bởi vì ExtUserProps mở rộng UserProps, cũng mở rộng Js, chúng ta lấy phương thức sym_add_operators
trong phạm vi biến biểu tượng 'friends_count
thành một lớp vỏ của SymOp. Sau đó chúng ta gọi phương thức trên SymOp mà sau đó chúng ta chuyển Extractor num
thành, mà tạo ra một Trình trích xuất tìm kiếm thuộc tính "friends_count" trên một đối tượng JSON và sau đó phân tích nó như một số trước khi trở về. Khá một chút xảy ra ở đó với một chút mã như vậy.
Phần tiếp theo của chương trình chỉ là một sự hiểu biết gọi ra dòng thời gian Twitter cho người dùng và phân tích nó thành JsObjects đại diện cho từng mục trạng thái, chúng tôi áp dụng trình trích xuất Status.text
để kéo thông báo trạng thái. Sau đó, chúng tôi làm như vậy để kéo người dùng ra. Sau đó, chúng ta kéo screen_name và friend_count ra khỏi người dùng JsObject và cuối cùng chúng tôi đưa ra một Tuple3 trở lại với tất cả các thuộc tính mà chúng tôi đang tìm kiếm. Sau đó, chúng tôi đã để lại một Danh sách [Tuple3 [String, String, BigDecimal]] mà sau đó bạn có thể lặp lại để in ra hoặc làm bất cứ điều gì.
Tôi hy vọng sẽ xóa một số thứ. Thư viện Dispatch rất biểu cảm nhưng có thể hơi khó khăn để quấn đầu của bạn xung quanh vì nó sử dụng rất nhiều thủ thuật Scala mà ai đó chỉ học Scala sẽ không nhận được ngay lập tức. Nhưng tiếp tục cắm và chơi với, cũng như xem xét các bài kiểm tra và mã nguồn, và bạn sẽ thấy cách tạo ra DSL mạnh mẽ bằng cách sử dụng Scala.
Câu trả lời phụ thuộc * hoàn toàn * trên thư viện/API bạn đang sử dụng, nhưng bạn chưa chỉ định điều này. –
tôi đang sử dụng thư viện HTTP công văn của scala .. –