【问题标题】:best way to handle multiple options scala处理多个选项scala的最佳方法
【发布时间】:2016-08-30 18:49:36
【问题描述】:

我目前正在使用一些具有多种选项类型的 scala 代码,我需要在一个对象上设置它们(如果它们存在的话

目前我正在做以下事情

def myFunc(arg1: Option[Int], arg2: Option[Float]) {
    val objSet1 = arg1.fold(obj)(obj.setArg1)
    val objSet2 = arg2.fold(objSet1)(objSet1.setArg2)
    obj.runComputation()
}

我觉得有一种方法可以通过 for 理解更优雅地做到这一点,但我的单子思维让我无法理解如何......

【问题讨论】:

  • obj 在哪里定义?它的类型是什么?为什么您的输入参数(arg1arg2)没有在该函数的任何地方使用?
  • @Snark 需要更多关于你想用这些选项做什么的信息。还需要知道当 arg1 为无或 arg2 为无时会发生什么
  • 这集成了一个库,因此我从字面上收集参数并包装底层函数调用。
  • 哦,哎呀,修复了。

标签: scala monads optional


【解决方案1】:

我认为实际上没有内置任何东西,但你可以这样做:

implicit class MaybeModifyOps [T](underlying: T) {
  def maybeModify[X](a: Option[X])(f: (T,X) => T): T = a.fold(underlying)(f(underlying,_))
}

并像这样使用它:

obj
  .maybeModify(arg1)(_ setArg1 _)
  .maybeModify(arg2)(_ setArg2 _)
  .runComputation()

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-09-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-08-13
    • 2016-05-26
    相关资源
    最近更新 更多