Pergunta

I precisam de apoio para quantidades com unidades. Eu gostaria que o sistema de tipo para impor unidade de correção, tanto quanto possível. Por exemplo, não deve ser possível combinar gramas com dólares. Eu estou indo para o caminho de tipos parametrizados, mas este código parece muito mais repetitivo do que o código Scala Eu vi com os outros.

abstract class UnitOfMeasure

abstract class Range[T] {
  type T <: UnitOfMeasure
}
class Quantity[T <: UnitOfMeasure](value: Double)
class DefiniteRange[T<:UnitOfMeasure](lowerBound: Quantity[T], upperBound: Quantity[T]) extends Range[T]
class Confidence(conf: Double) {
  require(0.0 <= conf && conf <= 1.0)
}
class ConfidenceInterval[T<:UnitOfMeasure](lowerBound: Quantity[T], upperBound: Quantity[T], confidence: Confidence) extends Range[T] {
    def this(lower: Quantity[T], upper: Quantity[T]) = this(lower, upper, new Confidence(.90))
}

Existe uma maneira mais limpa de fazer isso? A batida do. "T <: UnitOfMeasure" é a principal coisa que está me incomodando

Foi útil?

Solução

Outras dicas

Eu não tenho o livro, mas talvez um auto tipo é o que você precisa. Você pode colocar suas classes em outra classe e adicionar sua definição do tipo a ser utilizado no âmbito de classe.

De mdmcnlly:

Eu lembro de ver um exemplo na Programação em Scala reservar que dealth com um tipo base de animais que tiveram uma alimentos compatíveis, e subtipos que só podia comer a sua compatibilidade subtipo e não comida para os outros. Eu sentir como ele está relacionado, mas eu não sou certo. Talvez alguém com o livro acessível pode destrinchar os bons nuggets. A essência da solução é a utilização membros de tipo de uma classe base em vez destas anotações de variância todo o lugar.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top