【问题标题】:from some(x) to real type in scala从 some(x) 到 scala 中的真实类型
【发布时间】:2015-05-13 15:25:33
【问题描述】:

当我从Map[Int,Int] 类型的映射中获取元素时,我得到Some(24),我不能对其使用+,-,*,/ 操作,因为它不是Int。你能告诉我如何从该映射中获取Int 类型值而不是Some(24)?

【问题讨论】:

    标签: scala dictionary types functional-programming


    【解决方案1】:

    那是因为Map.get( key ) 返回一个Option。

    您可以使用以下更安全的方法,

    您可以为此使用模式匹配,

    val yourIntOption: Option[ Int ] = yourMap.get( "someKey" )
    
    // yourIntOption will be Some( i ) if key found or None if no such key.
    
    yourIntOption match {
      case Some( i ) => println( i + 1 )
      case None => println( "None" )
    }
    

    或者,你可以选择留在Optionmonad里面,

    val yourIntOption: Option[ Int ] = yourMap.get( "someKey" )
    
    val intOptionAfterAdding: option[ Int ] = yourIntOption.map( i => i + 1)
    

    另外,您可以使用以下不安全(可以抛出异常)的方法

    val yourInt = yourMap( "someKey" )
    // will throw a NoSuchElementException if this key is not found.
    

    或者,

    val yourIntOption: Option[ Int ] = yourMap.get( "someKey" )
    val yourInt = yourIntOption.get
    // will throw a NoSuchElementException if the option was None.
    

    或者,您可以使用有点确定的方法

    val yourIntOrDefaultMinusOne = yourMap.getOrElse( "someKey", -1 )
    

    【讨论】:

      【解决方案2】:

      Map 有一个apply 方法,可以直接返回值。你可以这样称呼它:

      val v = map(key)
      

      但是,请注意,如果键不在映射中,它将抛出 NoSuchElementException。我建议你熟悉Option 范式。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-10-22
        • 1970-01-01
        • 2023-04-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多