Scala-映射时使用默认值None?

用户1291

给定

trait A
case class B extends A

trait C

我正在尝试实现与此类似的东西:

val m = scala.collection.mutable.HashMap[String, C=>Option[A]](
    ... //some pre-defined mappings
).withDefaultValue((_:C) => None)

这会给我一个类型不匹配的信息:

expected: C=>Option[A], actual: C=>None.type

我听说scala希望catch子句不会返回None,所以我尝试了非常丑陋的

val m = scala.collection.mutable.HashMap[String, C=>Option[A]](
    ... //some pre-defined mappings
).withDefaultValue((_:C) => try {
    throw new RuntimeException()
    Some(B())
  } catch{ case _ => None}
)

但是,(幸亏)这也不起作用:

type mismatch, expected: C=>Option[A], actual: C=>Option[B]

做我想做的正确方法是什么?

雷克斯·克尔

None是的实例Option[Nothing]但是Option其类型参数是协变的,并且Nothing是所有内容的子类型。

这表示None是的子类型Option[A]只是这样说:

None: Option[A]

但是类型推断通常可以为您完成。如果您提前创建函数,

val default = (c: C) => None

那么您将得到错误的返回类型并需要指定返回类型,但withDefaultValue应该已经知道地图的类型。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

Scala默认值:如何在创建LinkedList时从Scala中的Any类型获取默认值?

来自分类Dev

Scala:如何使用非简单的默认值?

来自分类Dev

Scala宏:获取参数默认值

来自分类Dev

Scala中类型参数的默认值

来自分类Dev

Scala如何在不重新定义默认值的情况下使用默认值

来自分类Dev

Scala - 模式匹配布尔值和默认值时无法访问的代码

来自分类Dev

将scala映射值与列表进行比较,并为列表中不存在的键返回默认值

来自分类Dev

使用默认值在Scala中进行一般类型解析

来自分类Dev

如何在Scala中使用默认值初始化通用数组

来自分类Dev

Scala 集合的元素可以使用命名参数和默认值构造同级实例?

来自分类Dev

函数等于Scala中函数的默认值

来自分类Dev

具有默认值的Scala构造函数

来自分类Dev

在Scala中设置功能参数的默认值

来自分类Dev

Scala方法中变量参数的默认值

来自分类Dev

默认值为null的Scala别名参数抛出NullPointerException

来自分类Dev

如何在Scala中设置功能参数的默认值

来自分类Dev

为什么Mockito verifyNoMoreInteractions的Scala默认值有问题

来自分类Dev

Scala中参数中函数的默认值

来自分类Dev

函数等于Scala中函数的默认值

来自分类Dev

Scala中辅助构造函数中的枚举的默认值

来自分类Dev

Scala quasiquote 生成带反引号的参数默认值

来自分类Dev

在 Scala 中定义子类型时,为什么不将协变设置为默认值?

来自分类Dev

scala:带有类型参数的函数的默认值;在部分应用的上下文中使用

来自分类Dev

Scala中的JSON反序列化-如果字段不存在,请使用默认值

来自分类Dev

使用 Scala 的宏生成一个函数来实例化具有默认值的 case 类

来自分类Dev

映射时发生Scala:IndexOutOfBoundsException

来自分类Dev

在Scala中使用None或EmptyMyObj?

来自分类Dev

如何在Scala中惯用地处理默认值?

来自分类Dev

Scala:即使具有默认值,也无法检查不可达的匹配项

Related 相关文章

  1. 1

    Scala默认值:如何在创建LinkedList时从Scala中的Any类型获取默认值?

  2. 2

    Scala:如何使用非简单的默认值?

  3. 3

    Scala宏:获取参数默认值

  4. 4

    Scala中类型参数的默认值

  5. 5

    Scala如何在不重新定义默认值的情况下使用默认值

  6. 6

    Scala - 模式匹配布尔值和默认值时无法访问的代码

  7. 7

    将scala映射值与列表进行比较,并为列表中不存在的键返回默认值

  8. 8

    使用默认值在Scala中进行一般类型解析

  9. 9

    如何在Scala中使用默认值初始化通用数组

  10. 10

    Scala 集合的元素可以使用命名参数和默认值构造同级实例?

  11. 11

    函数等于Scala中函数的默认值

  12. 12

    具有默认值的Scala构造函数

  13. 13

    在Scala中设置功能参数的默认值

  14. 14

    Scala方法中变量参数的默认值

  15. 15

    默认值为null的Scala别名参数抛出NullPointerException

  16. 16

    如何在Scala中设置功能参数的默认值

  17. 17

    为什么Mockito verifyNoMoreInteractions的Scala默认值有问题

  18. 18

    Scala中参数中函数的默认值

  19. 19

    函数等于Scala中函数的默认值

  20. 20

    Scala中辅助构造函数中的枚举的默认值

  21. 21

    Scala quasiquote 生成带反引号的参数默认值

  22. 22

    在 Scala 中定义子类型时,为什么不将协变设置为默认值?

  23. 23

    scala:带有类型参数的函数的默认值;在部分应用的上下文中使用

  24. 24

    Scala中的JSON反序列化-如果字段不存在,请使用默认值

  25. 25

    使用 Scala 的宏生成一个函数来实例化具有默认值的 case 类

  26. 26

    映射时发生Scala:IndexOutOfBoundsException

  27. 27

    在Scala中使用None或EmptyMyObj?

  28. 28

    如何在Scala中惯用地处理默认值?

  29. 29

    Scala:即使具有默认值,也无法检查不可达的匹配项

热门标签

归档