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

泡菜

我有一个函数定义为:

def par(min: Int = -1, exact: Int = -1, auto: Boolean = false) = {
  require(min > 0 || exact > 0 || auto, "Invalid argument")
  OpPar(drm, minSplits = min, exactSplits = exact)
}

在使用此功能的另一个函数中,我将“选项”传递给par参数。我想允许par使用它自己的默认值,但是没有看到如何在Scala中做到这一点(没有难看的逻辑),因此实际上我必须重新定义默认值。

drmARaw.par(
  min = minPar.getOrElse(-1),// if par changes this may the be wrong default
  exact = exactPar.getOrElse(-1),// if par changes this may the be wrong default
  auto = autoPar.getOrElse(true))

如果默认值曾经更改过,则会将错误的默认值传递给minexact使用复杂的逻辑,我可以决定哪个版本的par基础上,以呼叫OptionPARAMS是nonEmpty用于minParexactPar但这是很丑陋并且必须要对默认PARAMS每个函数以不同的方式写。实际上,每个Scala库都存在这种情况。如果他们更改了默认值,但我没有注意到它,我的代码将被破坏。

上面的示例说明了该问题,但我正在寻找一种Scala惯用法,该惯用法将覆盖函数具有可以更改的默认值的每种情况。我想编写独立于lib函数中默认参数更改的代码。

w

因此,据我所知Option,您需要解包并作为传递的参数发送三个,除非有任何选项,否则被None调用的方法应针对丢失的参数使用其自己的默认值。

在我看来,您唯一的选择是蛮力。

(minPar, exactPar, autoPar) match {
  case (Some(m),Some(e),Some(a)) => par(min=m, exact=e, auto=a)
  case (Some(m),Some(e),None)    => par(min=m, exact=e        )
  case (Some(m),None,   Some(a)) => par(min=m,          auto=a)
  case (Some(m),None,   None)    => par(min=m                 )
  case (None,   Some(e),Some(a)) => par(       exact=e, auto=a)
  case (None,   Some(e),None)    => par(       exact=e        )
  case (None,   None,   Some(a)) => par(                auto=a)
  case (None,   None,   None)    => par()
}

有了2个参数,这很容易。有了3,它是易于管理的。之后....痛苦的。

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

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

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何在没有导出默认值的情况下构建组件导出?

来自分类Dev

如何在不使用嵌入式javascript的情况下修改选择下拉列表的默认值?

来自分类Dev

闪亮:如何在考虑默认值的情况下使用 actionButton 隔离日期范围中的日期选择?

来自分类Dev

如何为新定义的字段分配默认值?

来自分类Dev

在保持默认值的情况下使文本消失

来自分类Dev

如何在不看屏幕的情况下将xcalib对比度重置为默认值?

来自分类Dev

可以在不提供默认值的情况下使用关键字参数吗?

来自分类Dev

在道具为空的情况下如何传递具有默认值的道具而不使用道具的“ default”属性

来自分类Dev

如何在不使用sqlite raw语句/conn.execute()的情况下为Sqlite.net设置默认值

来自分类Dev

如何设置默认值ngOptions,当选项是对象,并且默认情况下是一个整数ID

来自分类Dev

如何在where子句中使用列默认值来标识默认值

来自分类Dev

如何在Django CharField下启用默认值显示

来自分类Dev

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

来自分类Dev

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

来自分类Dev

Scala:如何在部分函数中定义具有默认值的参数

来自分类Dev

Scala:如何在部分函数中定义具有默认值的参数

来自分类Dev

Scala:如何在伴随对象中定义构造函数参数的默认值?

来自分类Dev

在不存在特定值的情况下,通过选择在分组中添加默认值

来自分类Dev

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

来自分类Dev

SQLite-如何在引用其他列值的情况下在Create Table语句中定义列的默认值

来自分类Dev

如何在top命令中将内存使用情况排序设置为默认值?

来自分类Dev

如何在不重新定义属性的情况下观察Polymer中的继承属性

来自分类常见问题

如何在ReactJS中使用默认值编辑输入

来自分类Dev

如何在Postgres中使用默认值创建枚举

来自分类Dev

如何在ReactJS中使用默认值编辑输入

来自分类Dev

如何在SELECT查询中使用默认值?

来自分类Dev

如何在Postgres中使用默认值创建枚举

来自分类Dev

如何在char数组中使用默认值?

来自分类Dev

按钮按下颜色后,如何在4.4或更早版本上使用默认值?

Related 相关文章

  1. 1

    如何在没有导出默认值的情况下构建组件导出?

  2. 2

    如何在不使用嵌入式javascript的情况下修改选择下拉列表的默认值?

  3. 3

    闪亮:如何在考虑默认值的情况下使用 actionButton 隔离日期范围中的日期选择?

  4. 4

    如何为新定义的字段分配默认值?

  5. 5

    在保持默认值的情况下使文本消失

  6. 6

    如何在不看屏幕的情况下将xcalib对比度重置为默认值?

  7. 7

    可以在不提供默认值的情况下使用关键字参数吗?

  8. 8

    在道具为空的情况下如何传递具有默认值的道具而不使用道具的“ default”属性

  9. 9

    如何在不使用sqlite raw语句/conn.execute()的情况下为Sqlite.net设置默认值

  10. 10

    如何设置默认值ngOptions,当选项是对象,并且默认情况下是一个整数ID

  11. 11

    如何在where子句中使用列默认值来标识默认值

  12. 12

    如何在Django CharField下启用默认值显示

  13. 13

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

  14. 14

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

  15. 15

    Scala:如何在部分函数中定义具有默认值的参数

  16. 16

    Scala:如何在部分函数中定义具有默认值的参数

  17. 17

    Scala:如何在伴随对象中定义构造函数参数的默认值?

  18. 18

    在不存在特定值的情况下,通过选择在分组中添加默认值

  19. 19

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

  20. 20

    SQLite-如何在引用其他列值的情况下在Create Table语句中定义列的默认值

  21. 21

    如何在top命令中将内存使用情况排序设置为默认值?

  22. 22

    如何在不重新定义属性的情况下观察Polymer中的继承属性

  23. 23

    如何在ReactJS中使用默认值编辑输入

  24. 24

    如何在Postgres中使用默认值创建枚举

  25. 25

    如何在ReactJS中使用默认值编辑输入

  26. 26

    如何在SELECT查询中使用默认值?

  27. 27

    如何在Postgres中使用默认值创建枚举

  28. 28

    如何在char数组中使用默认值?

  29. 29

    按钮按下颜色后,如何在4.4或更早版本上使用默认值?

热门标签

归档