有没有办法从Racket中返回`(values 1 2 3)`的函数访问第n个返回值?

雅库布·阿诺德(Jakub Arnold)

给定这样的功能

(define (foo) (values 1 2 3))

我可以以某种方式调用(foo)并仅获取其中一个值,例如(first (foo))吗?我曾考虑为此定义一个辅助函数,但它必须与被调用函数的匹配性相匹配,这感觉不对。

(define (first x y z) x)
(first (foo))
亚历克西斯·金

好吧,简单的方法是只使用define-values绑定所有三个值,然后忽略后两个。但是,这有点令人不满意。更好的解决方案是使用match-define-values,它将允许您显式忽略其他两个。

(match-define-values (a _ _) (values 1 2 3))

尽管如此,这实际上并不仅仅是让您包装一个在另一个函数中返回多个值的函数,只是为了获得第一个值。

Racket并没有真正提供用于处理多个值的很多内置功能,而这实际上是设计使然。其他软件包可能包含您想要的功能-例如,该sugar软件包提供values->list

(first (values->list (values 1 2 3)))

出于某种原因,这不在核心库中:这是一种反模式。从函数返回多个值是您应该谨慎执行的事情。在Racket中,没有多少函数会返回多个值,因为它们使程序难以推理。它们的组合不好,而且很少是解决问题的最佳方法。

某些情况下,多个返回值很有用,通常是在编写出于性能原因一次执行两项操作的函数时。例如,quotient/remainder刚刚返回的值quotientremainder,但因为它是在一个函数中完成,它可以更有效地实现。同样,split-at和都调用take相同drop,但效率更高。

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

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

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

有没有办法从Racket中返回`(values 1 2 3)`的函数访问第n个返回值?

来自分类Dev

在 Octave 中,有没有办法在 2 个变量中为 1 个变量求解方程

来自分类常见问题

有没有办法将输入从案例1到案例2在Java中?

来自分类Dev

有没有办法增加cv2.findContours返回的点数?

来自分类Dev

有没有办法在Python 2中访问分数的分母

来自分类Dev

有没有办法在python / rpy2中访问R数据帧列名?

来自分类Dev

有没有办法断开JavaFX LineChart中串联的2个点?

来自分类Dev

Google 表格:有没有办法在公式中包含 2 个非嵌套的 IF 语句?

来自分类Dev

有没有办法建立返回值?

来自分类Dev

有没有办法为2个具有不同程序包名称的应用程序提供1个Firebase数据库?

来自分类Dev

有没有办法在返回数组中不使用指针?(警告:传递 'arrangef' 的参数 1 使指针从整数而不进行强制转换。)

来自分类Dev

有没有办法我可以为“ 2>&1&”设置快捷方式

来自分类Dev

有没有办法遍历 Key:[Value1:[Value2]] 形式的字典?

来自分类Dev

当我滑动时,有没有办法阻止片段 1 转到片段 2?

来自分类Dev

有没有办法在mongodb的子文档数组中匹配2个特定的字段值?

来自分类Dev

有没有办法可以在按钮中的 2 个 onclick 上分配 2 个单独的功能?

来自分类Dev

有没有办法使用 TextToColumns 进行逗号分隔,只有 2 个值?

来自分类Dev

有没有办法将多个 EditingElementStyle 属性合并到 1 个 DataGridTextColumn 中?XAML WPF

来自分类Dev

有没有办法在 R 中更改 ggplot2 (geom_point) 中的大小值范围?

来自分类Dev

有没有办法从两个可能的@Inputs 中设置一个变量?(Angular2+)

来自分类Dev

有没有办法减少到第1列?

来自分类Dev

有没有办法检查ajax函数返回值是真还是假?

来自分类Dev

有没有办法在python中列出2个数据时间之间的日期时间范围?

来自分类Dev

有没有办法在python中列出2个数据时间之间的日期时间范围?

来自分类Dev

有没有办法用Node JS在把手中嵌套2个不同的对象

来自分类Dev

有没有办法用相同的选项验证 html 中的 2 个选择标签?使用 JavaScript

来自分类Dev

iOS 有没有办法按 2 个值对 NSDictionary 的键进行排序?

来自分类Dev

如何从列和前后列中返回第 1 2...n 个非空值

来自分类Dev

有没有办法获取标签,将其转换为int,加1,然后将此值返回到字符串以将其显示为标签?

Related 相关文章

  1. 1

    有没有办法从Racket中返回`(values 1 2 3)`的函数访问第n个返回值?

  2. 2

    在 Octave 中,有没有办法在 2 个变量中为 1 个变量求解方程

  3. 3

    有没有办法将输入从案例1到案例2在Java中?

  4. 4

    有没有办法增加cv2.findContours返回的点数?

  5. 5

    有没有办法在Python 2中访问分数的分母

  6. 6

    有没有办法在python / rpy2中访问R数据帧列名?

  7. 7

    有没有办法断开JavaFX LineChart中串联的2个点?

  8. 8

    Google 表格:有没有办法在公式中包含 2 个非嵌套的 IF 语句?

  9. 9

    有没有办法建立返回值?

  10. 10

    有没有办法为2个具有不同程序包名称的应用程序提供1个Firebase数据库?

  11. 11

    有没有办法在返回数组中不使用指针?(警告:传递 'arrangef' 的参数 1 使指针从整数而不进行强制转换。)

  12. 12

    有没有办法我可以为“ 2>&1&”设置快捷方式

  13. 13

    有没有办法遍历 Key:[Value1:[Value2]] 形式的字典?

  14. 14

    当我滑动时,有没有办法阻止片段 1 转到片段 2?

  15. 15

    有没有办法在mongodb的子文档数组中匹配2个特定的字段值?

  16. 16

    有没有办法可以在按钮中的 2 个 onclick 上分配 2 个单独的功能?

  17. 17

    有没有办法使用 TextToColumns 进行逗号分隔,只有 2 个值?

  18. 18

    有没有办法将多个 EditingElementStyle 属性合并到 1 个 DataGridTextColumn 中?XAML WPF

  19. 19

    有没有办法在 R 中更改 ggplot2 (geom_point) 中的大小值范围?

  20. 20

    有没有办法从两个可能的@Inputs 中设置一个变量?(Angular2+)

  21. 21

    有没有办法减少到第1列?

  22. 22

    有没有办法检查ajax函数返回值是真还是假?

  23. 23

    有没有办法在python中列出2个数据时间之间的日期时间范围?

  24. 24

    有没有办法在python中列出2个数据时间之间的日期时间范围?

  25. 25

    有没有办法用Node JS在把手中嵌套2个不同的对象

  26. 26

    有没有办法用相同的选项验证 html 中的 2 个选择标签?使用 JavaScript

  27. 27

    iOS 有没有办法按 2 个值对 NSDictionary 的键进行排序?

  28. 28

    如何从列和前后列中返回第 1 2...n 个非空值

  29. 29

    有没有办法获取标签,将其转换为int,加1,然后将此值返回到字符串以将其显示为标签?

热门标签

归档