解构函数的return语句,但不要替换现有变量

加里

在CoffeeScript中,当返回具有多个返回值的函数时,我喜欢使用分解分配。与返回数组相比,它使返回的内容更加清晰。

例如,从JavaScript中的函数返回数组:

function getSumAndDiff(firstNumber, secondNumber) {
  var sum = firstNumber + secondNumber
  var difference = firstNumber - secondNumber

  return [sum, difference]
}

var values = getSumAndDiff(10, 5)
var sum = values[0]
var difference = values[1]

在CoffeeScript中,从函数返回对象:

getSumAndDiff = (firstNumber, secondNumber) ->
  sum = firstNumber + secondNumber
  difference = firstNumber - secondNumber

  {sum, difference}

{sum, difference} = getSumAndDiff(10, 5)

但是,问题在于CoffeeScript方法将替换任何现有的称为sum和的变量difference因此,如果我连续多次运行此功能,则它们将继续覆盖前一个功能。

当然,有几种方法可以解决此问题,例如,只需每次将返回的变量分配给其他名称,就像这样:

{sum, difference} = getSumAndDiff(10, 5)
sum1 = sum
difference1 = difference

{sum, difference} = getSumAndDiff(11, 6)
sum2 = sum
difference2 = difference

但是,有没有更清洁的方法呢?或者,也许是最好的解决方案,当我需要连续运行多次这样的函数时,简单地返回一个数组?还是闭包有意义,或者代码过多?我只是想知道是否可能缺少某些东西,因为我认为必须有一种更清洁的方式来做到这一点,尤其是使用CoffeeScript时?还是我一般的处理方法有缺陷,例如为了简化操作,我应该每个函数只返回一个返回值?

西尔万·勒鲁

你现在所拥有的...

好吧,我明白了。当您写:

getSumAndDiff = (firstNumber, secondNumber) ->
  sum = firstNumber + secondNumber
  difference = firstNumber - secondNumber

  {sum, difference}

该函数getSumAndDifference返回一个关联数组(以及一个对象,该数组具有键名和变量值。这只是语法糖,相当于:

{ 'sum': sum, 'diff': diff }

该关联数组是返回的值,然后您可以使用对象分解来获取各个感兴趣的字段:

{sum, difference} = getSumAndDiff(10, 5)

再一次,这只是语法糖:

_obj =  getSumAndDiff(10, 5)
sum = _obj['sum']
diff = _obj['diff']

...现在,一些替代方案

1)混淆对象的分解

首先,正如您自己解释的那样,您可以使用“别名”对象销毁来取回值作为另一个名称:

{sum:x, diff: y} = getSumAndDiff(10, 5)

这将设置x为与sum返回对象的字段相同的值y与字段具有相同的值diff

语法糖周围:

_obj = getSumAndDiff(10, 5)
x = _obj['sum']
y = _obj['diff']

作为旁注,请再次注意{sum,diff}实际上写快捷方式{sum: sum, diff: diff}

2)阵列解构

另一个更简单的替代方法不是返回对象,而是返回一个数组(更正式地讲,是一个数字索引的array):

getSumAndDiff = (firstNumber, secondNumber) ->
  sum = firstNumber + secondNumber
  difference = firstNumber - secondNumber

  [sum, difference]  ## <-- array [ ... ] not object { ... }

使用该语法,sum并且diff作为index01resp的项返回数组 从调用方来看,然后可以使用数组解构来提取这些值:

[sum, diff] = getSumAndDiff(10, 5)

由于数组是按数字索引的,因此您不必担心字段名称。因此,您也可以这样写:

[x, y] = getSumAndDiff(10, 5)
[sum2, diff2] = getSumAndDiff(10, 5)
...

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

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

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

不要注释适用于所有变量的声明语句?

来自分类Dev

用字符串前缀值,但不要覆盖现有值

来自分类Dev

Javascript解构以填充现有对象

来自分类Dev

PHP if语句使用!empty()不能正确检查现有变量

来自分类Dev

如何替换现有方法中的函数调用

来自分类Dev

将所有出现的双破折号(-)替换为—,但不要替换属性或注释内的内容

来自分类Dev

Javascript用函数return替换局部变量

来自分类Dev

Javascript用函数return替换局部变量

来自分类Dev

python import inside函数隐藏现有变量

来自分类Dev

python import inside函数隐藏现有变量

来自分类Dev

使用javascript将变量推送到现有函数

来自分类Dev

使用 foreach 生成新变量作为现有的函数

来自分类Dev

“此函数的返回类型为'Widget',但不以return语句结尾。”

来自分类Dev

此函数的返回类型为'String',但不以return语句结尾

来自分类Dev

该函数的返回类型为'FutureOr <User>',但不以return语句结尾

来自分类Dev

将键替换为值(但不要翻转)

来自分类Dev

使用变量的SQL替换语句

来自分类Dev

额外变量或现有变量

来自分类Dev

具有局部变量的递归函数未执行if语句

来自分类Dev

通过带有函数的switch语句传递变量

来自分类Dev

if 语句在函数内部没有找到变量(Wordpress 插件)

来自分类Dev

在没有return语句的情况下到达函数结尾

来自分类Dev

在函数中包含return语句有什么好处?

来自分类Dev

具有多个return语句的函数返回什么?

来自分类Dev

带有return语句的C ++函数中的内联汇编

来自分类Dev

Perl:将元素推入数组将现有值替换为新的变量值

来自分类Dev

Perl:将元素推入数组将现有值替换为新的变量值

来自分类Dev

如何使用PowerShell导入文件,并将所有现有的占位符变量替换为脚本中定义的变量?

来自分类Dev

如何在canvas-html5中绘制图像并替换为现有函数

Related 相关文章

  1. 1

    不要注释适用于所有变量的声明语句?

  2. 2

    用字符串前缀值,但不要覆盖现有值

  3. 3

    Javascript解构以填充现有对象

  4. 4

    PHP if语句使用!empty()不能正确检查现有变量

  5. 5

    如何替换现有方法中的函数调用

  6. 6

    将所有出现的双破折号(-)替换为—,但不要替换属性或注释内的内容

  7. 7

    Javascript用函数return替换局部变量

  8. 8

    Javascript用函数return替换局部变量

  9. 9

    python import inside函数隐藏现有变量

  10. 10

    python import inside函数隐藏现有变量

  11. 11

    使用javascript将变量推送到现有函数

  12. 12

    使用 foreach 生成新变量作为现有的函数

  13. 13

    “此函数的返回类型为'Widget',但不以return语句结尾。”

  14. 14

    此函数的返回类型为'String',但不以return语句结尾

  15. 15

    该函数的返回类型为'FutureOr <User>',但不以return语句结尾

  16. 16

    将键替换为值(但不要翻转)

  17. 17

    使用变量的SQL替换语句

  18. 18

    额外变量或现有变量

  19. 19

    具有局部变量的递归函数未执行if语句

  20. 20

    通过带有函数的switch语句传递变量

  21. 21

    if 语句在函数内部没有找到变量(Wordpress 插件)

  22. 22

    在没有return语句的情况下到达函数结尾

  23. 23

    在函数中包含return语句有什么好处?

  24. 24

    具有多个return语句的函数返回什么?

  25. 25

    带有return语句的C ++函数中的内联汇编

  26. 26

    Perl:将元素推入数组将现有值替换为新的变量值

  27. 27

    Perl:将元素推入数组将现有值替换为新的变量值

  28. 28

    如何使用PowerShell导入文件,并将所有现有的占位符变量替换为脚本中定义的变量?

  29. 29

    如何在canvas-html5中绘制图像并替换为现有函数

热门标签

归档