web-dev-qa-db-ja.com

文字列がnullまたは空かどうかを確認するパターンマッチング

一致を使用して文字列がnullまたは空であるかどうかを確認することは可能ですか?

私は次のようなことをしようとしています:

def sendToYahoo(message:Email) ={
  val clientConfiguration = new ClientService().getClientConfiguration()
  val messageId : Seq[Char] = message.identifier
  messageId match {
    case messageId.isEmpty => validate()
    case !messageId.isEmpty => //blabla
  }
}

しかし、コンパイルエラーがあります。

少し早いですがお礼を。

14
placplacboom

次のような単純な関数を書くことができます。

def isEmpty(x: String) = Option(x).forall(_.isEmpty)

または

def isEmpty(x: String) = x == null || x.isEmpty

" "も空と見なす場合は、文字列をトリミングすることもできます。

def isEmpty(x: String) = x == null || x.trim.isEmpty

そしてそれを使用する

val messageId = message.identifier
messageId match {
  case id if isEmpty(id) => validate()
  case id => // blabla
}

またはmatchなし

if (isEmpty(messageId)) {
  validate()
} else {
  // blabla
}

あるいは

object EmptyString {
  def unapply(s: String): Option[String] =
    if (s == null || s.trim.isEmpty) Some(s) else None
}

message.identifier match {
  case EmptyString(s) => validate()
  case _ => // blabla
}
31
def isNullOrEmpty[T](s: Seq[T]) = s match {
     case null => true
     case Seq() => true
     case _ => false
}
8
Lee