Создание метода, который может работать с 2 строками - PullRequest
1 голос
/ 16 апреля 2020

Скажем, я хотел создать новый оператор в scala, который бы делал это:

val a = "hello"
val b = "world" | a

Этот новый метод с именем | будет работать с 2 строками, они также могут быть потенциально опциями.

Если первая строка равна None или "", тогда возвращается к 2-му значению a.

Итак:

val a = "hello"
val b = "world" | a
b is "world"

И:

val a = "hello"
val b = "" | a
b is "hello"

И

val a: Option[String] = None
val b = a | "world"
b is "world"

Если кто-то может объяснить, как он может написать это, и какие функции Scala позволяют DSL, подобному этому, работать.

1 Ответ

1 голос
/ 16 апреля 2020

Вы можете определить методы расширения

implicit class StringOptionOps(s: Option[String]) {
  def |(s1: String): String         = orElse(s, Some(s1))
  def |(s1: Option[String]): String = orElse(s, s1)
}

implicit class StringOps(s: String) {
  def |(s1: String): String         = orElse(Some(s), Some(s1))
  def |(s1: Option[String]): String = orElse(Some(s), s1)
}

def orElse(s: Option[String], s1: Option[String]): String =
  s.filter(_.nonEmpty).orElse(s1).getOrElse("")
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...