videos ver para palabras mejores mas los lista hashtags generador etiquetas como buscadas scala types

ver - Palabra clave de tipo Scala: cuál es la mejor manera de usarla en múltiples clases



tags para videos de youtube (3)

¿ Funcionarán los objetos del paquete para usted?

Del artículo:

Hasta el 2.8, las únicas cosas que podía poner en un paquete eran clases, rasgos y objetos independientes. Estas son de lejos las definiciones más comunes que se colocan en el nivel superior de un paquete, pero Scala 2.8 no lo limita a esas. Cualquier clase de definición que pueda incluir dentro de una clase, también puede colocarla en el nivel superior de un paquete. Si tiene algún método de ayuda que le gustaría tener en alcance para un paquete completo, continúe y póngalo en el nivel superior del paquete. Para hacerlo, coloca las definiciones en un objeto de paquete. Cada paquete tiene permitido tener un objeto de paquete. Las definiciones ubicadas en un objeto de paquete se consideran miembros del paquete en sí.

El scala del objeto del paquete ya tiene muchos tipos y valores, por lo que creo que puede usar la misma técnica para sus propios tipos.

Volviendo a Scala después de escribir un hechizo Haskell, comencé a usar la palabra clave type para hacer que las definiciones de mi clase sean un poco más legibles, por ejemplo:

type RestfulParams = Map[String, String] def canonicalize(params: RestfulParams): String = { ... }

El problema con el que me he encontrado es que estas definiciones de tipo necesitan vivir dentro de una clase u objeto; no son "ciudadanos de primera clase" como lo son en Haskell. Si trato de definir un tipo fuera de una clase u objeto, obtengo una expected class or object definition compilador.

Mi problema entonces es cómo usar estos tipos en múltiples clases y objetos en un paquete. Lo que he hecho ahora parece bastante feo:

object RestfulTypes { type RestfulParams = Map[String, String] etc }

Y luego en otro archivo de clase:

import utils.{RestfulTypes => RT} def get(resource: String, params: RT.RestfulParams): String = { ... }

¿Hay alguna manera más agradable de hacerlo? Y, por cierto, ¿piensan los gurús de Scala que es bueno o malo que los tipos solo se puedan definir dentro de clases / objetos?


No estoy seguro de qué constituye la amabilidad en este caso, pero aquí hay dos opciones:

Usando un rasgo: ( Patrón de rasgos desinteresados ​​de Scala )

trait RestfulTypes { type Params = Map[String,String] //... } object MyRestService extends RestService with RestfulTypes { /* ... */ }

O simplemente importe los miembros del objeto, utilizándolo de manera efectiva como un paquete:

import util.RestfulTypes._


Youn puede usar un objeto de paquete y poner la declaración de tipo allí. Cuando importe ese paquete, la definición de tipo estará disponible.

Un ejemplo :

//package myType package object myType {type mine = List[String]}

Tenga en cuenta que el objeto del paquete tiene el mismo nombre que el paquete para que se pueda utilizar sin un prefijo de objeto, es decir, myType.mine si lo nombra con un nombre diferente, por ejemplo:

//package myType package object mainType {type mine = List[String]}

se puede acceder con mainType.mine cuando se importa "paquete"

para más información: http://www.scala-lang.org/docu/files/packageobjects/packageobjects.html