Forma equivalente de Scala de Rango a class personalizada
Recientemente mirando a Kotlin y usted puede hacer ..
o en algunas classs personalizadas en lugar de Int
u otros.
Kotlin logra eso a través de una function de extensión de la siguiente manera: operator fun <T: Comparable<T>> T.rangeTo(that: T): ClosedRange<T>
que significa que mientras su class implemente una interfaz Comparable
, puede getla gratis usted puede hacer: val now = LocalDate.now() val vacation = now..now.plusDays(10)
- Comstackción manual de JAR para Scala & Kotlin
- ¿Es posible express kotlin 'con' método equivalente en Scala?
- ¿Existe un análogo Future.sequence en kotlin?
- Sistema local de administración de packages Java en Python PIP style?
- Hay alguna biblioteca para trabajar con mónadas en kotlin?
Descubrí que es bastante conveniente. Me pregunto cómo podemos hacerlo en Scala, sé que de alguna manera deberíamos lograrlo a través de la class de letra. Quizás sea correcto o incorrecto.
¿Alguien puede mostrarme la forma más sencilla de hacerlo en Scala? Parece que no hay incorporado, al less para LocalDate
- Genéricos reificados en Scala 2.10
- Progtwigción funcional: cómo continuar el context para una cadena de reglas de validation
- Herencia genérica de Kotlin
- Kotlin zipToda alternativa
- ¿Cómo hacer que los constructores seguros de Kotlin trabajen en Scala?
- Tipo de function con receptor en Scala
- Usar varios lenguajes JVM en el mismo proyecto
- Kotlin: llaves de varias expresiones (o declaraciones)
Bueno, siempre puedes usar el viejo patrón chulo-mi-biblioteca para agregar methods de tipo Range
a las classs de interés.
import java.time.LocalDate import java.time.temporal.ChronoUnit implicit class LocalDateRange(start: LocalDate) { // Note: LocalDate already has an until() method so can't add that here def to(end: LocalDate): IndexedSeq[LocalDate] = IndexedSeq.iterate( start , ChronoUnit.DAYS.between(start, end.plusDays(1L)).toInt )(_.plusDays(1L)) }
Uso:
val now = LocalDate.now() val vacation: IndexedSeq[LocalDate] = now to now.plusDays(10)
Elegí IndexedSeq[]
porque los documentos de Scala dicen que Range
es "un caso especial de una secuencia indexada", por lo que parecía apropiado.
Scala no proporciona intervalo como class como Kotlin Range
. Hay varias alternativas:
- Escribe tu propia class de intervalo
- Usa el range de guayaba
- Usa la tupla como range, pero adminístrala tú mismo