Тест на пустое значение универсальный для всех типов - PullRequest
6 голосов
/ 30 декабря 2011

Я ищу решение для тестирования, если значение любого типа пусто (или по умолчанию). То есть некоторый метод на Any, который проверяет, равен ли экземпляр String "", Int - 0, Float - 0f, Boolean - ... false, List не содержит элементов и так далее для других типов. Прежде всего, мне интересно, существует ли какое-либо решение в стандартной библиотеке, и если нет, то как бы вы его реализовали. Я считаю, что это может быть полезно, и если его нет в стандартной библиотеке, его следует предложить.

Ответы [ 2 ]

11 голосов
/ 30 декабря 2011

Использование Zero тип-класс от Scalaz.

scala> import scalaz._, Scalaz._
import scalaz._
import Scalaz._

scala> def isEmpty[A : Zero](value: A) = value == mzero[A]
isEmpty: [A](value: A)(implicit evidence$1: scalaz.Zero[A])Boolean

scala> isEmpty("")
res0: Boolean = true

scala> isEmpty(List())
res1: Boolean = true

scala> isEmpty(false)
res2: Boolean = true

scala> isEmpty("O HAI")
res3: Boolean = false

Ссылка на мою запись в блоге по соответствующей теме.

2 голосов
/ 30 декабря 2011

Вместо того, чтобы передавать вещи типа T, вы можете передавать вещи типа Option [T], оборачивая все допустимые вещи типа T, например

val thing = 1
val thingOption = Some(thing) 

, и сохраняя все недопустимые данные как Nones.Примерно так:

val thingOption = None

Затем, если вы хотите принять решение на основе значения thingOption, вы можете сделать это следующим образом

thingOption match {
    case None    => // Whatever you want to do with defaults
    case Some(x) => // Whatever you want to do with 'thing' if it isn't a default
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...