Simplify if (x) Some(y) else None?

后端 未结 7 2001
旧时难觅i
旧时难觅i 2021-02-05 02:46

This common pattern feels a bit verbose:

if (condition) 
  Some(result)
else None

I was thinking of using a function to simplify:



        
7条回答
  •  耶瑟儿~
    2021-02-05 03:23

    Here is another approach that is quite straightforward:

    Option(condition).collect{ case true => result }
    

    A simple example:

    scala> val enable = true
    enable: Boolean = true
    
    scala> Option(enable).collect{case true => "Yeah"}
    res0: Option[String] = Some(Yeah)
    
    scala> Option(!enable).collect{case true => "Yeah"}
    res1: Option[String] = None
    

    Here some advanced non-Boolean examples that put the condition into the pattern match:

    val param = "beta"
    Option(param).collect{case "alpha" => "first"} // gives None
    
    Option(param).collect{case "alpha" => "first"
                          case "beta"  => "second"
                          case "gamma" => "third"} // gives Some(second)
    
    val number = 999
    Option(number).collect{case 0 => "zero"
                           case x if x > 10 => "too high"} // gives Some(too high)
    

提交回复
热议问题