Normalmente, se puede pensar símbolos Scala de como un identificador único que siempre será el mismo. Cada símbolo que es lexi-gráficamente idéntico se refiere al mismo espacio de memoria. No hay nada más especial sobre ellos desde el punto de vista de Scala.
Sin embargo, Dispatch-Json prohíbe símbolos que los convierten en extractores de propiedades JSON. Para ver el código que es responsable del proxenetismo, consulte SymOp class y el resto del código JsonExtractor.scala.
Vamos a escribir algo de código que resuelve el problema que usted está mirando y luego analizar lo que está pasando:
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)
Lo primero que estamos haciendo es extender el rasgo userprops en el módulo de Despacho-Twitter para darle un extractor friends_count
y luego definir un objeto ExtUser
que podemos usar para obtener acceso a ese extractor. Debido a que ExtUserProps extiende UserProps, que también extiende Js, obtenemos el método sym_add_operators
en el alcance que convierte nuestro símbolo 'friends_count
en una clase de caso SymOp. Luego llamamos al método en ese SymOp al que luego pasamos el Extractor num
, que crea un Extractor que busca una propiedad "cuenta_amigos" en un objeto JSON y luego lo analiza como un número antes de regresar. Bastante un poco allí para un código tan pequeño.
La siguiente parte del programa es solo una comprensión que llama a la línea de tiempo de Twitter para un usuario y la analiza en JsObjects que representan cada elemento de estado, les aplicamos el extractor Status.text
para extraer el mensaje de estado. Luego hacemos lo mismo para sacar al usuario. A continuación, extraemos el nombre de pantalla y el número de amigo del usuario JsObject y, finalmente, cedemos un Tuple3 con todas las propiedades que estábamos buscando. Luego nos queda una Lista [Tuple3 [String, String, BigDecimal]] que luego puede repetir para imprimir o hacer lo que quiera con.
Espero que aclare algunas cosas. La biblioteca Dispatch es muy expresiva, pero puede ser un poco difícil de entender ya que utiliza muchos trucos Scala que alguien que recién está aprendiendo Scala no obtendrá de inmediato. Pero sigue conectando y jugando, además de ver las pruebas y el código fuente, y verás cómo crear poderosas DSL usando Scala.
La respuesta depende * completamente * de la biblioteca/API que está utilizando, pero no ha especificado esto. –
estoy usando la biblioteca HTTP de envío de scala .. –