Есть ли какая-то операция «tee» на Option
в стандартной библиотеке Scala? Лучшее, что я мог найти, это foreach
, однако его тип возврата Unit
, поэтому он не может быть прикован.Операция «tee» по типу опций Scala?
Это то, что я ищу: с учетом экземпляра Option
выполнить некоторую операцию с побочными эффектами по ее значению, если опция не пуста (Some[A]
), в противном случае ничего не делать; возвратите вариант в любом случае.
У меня есть собственная реализация с использованием неявного класса, но мне интересно, есть ли более простой способ сделать это без неявного преобразования:
object OptionExtensions {
implicit class TeeableOption[A](value: Option[A]) {
def tee(action: A => Unit): Option[A] = {
value foreach action
value
}
}
}
Пример кода:
import OptionExtensions._
val option: Option[Int] = Some(42)
option.tee(println).foreach(println) // will print 42 twice
val another: Option[Int] = None
another.tee(println).foreach(println) // does nothing
Любой предложения?
Я не предполагаю, что вы увидите что-либо, что неявно вводит побочные эффекты в функцию в стандартной библиотеке. –
Побочные эффекты и функциональное программирование не являются друзьями. –
Нет. http://stackoverflow.com/questions/9671620/how-to-keep-return-value-when-logging-in-scala http: // stackoverflow.com/questions/16742060/analog-to-rubys-tap-method-in-scala –