首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在值上使用变量函数.表达式

在值上使用变量函数.表达式
EN

Stack Overflow用户
提问于 2021-01-24 17:21:54
回答 2查看 155关注 0票数 2

我最近碰到了一个玩具例子,让我有点困惑。假设我定义了一个简单的变量函数,如下所示。那么,我们完全有权利在一个论点和两个论点上运行这个问题。

代码语言:javascript
复制
(define (my-func . a) a)

(my-func 1)  ; evals to '(1)
(my-func 1 2)  ; evals to '(1 2)

我遇到的奇怪之处是,如果我试图使用values一次传递多个参数,如下所示:

代码语言:javascript
复制
(my-func (values 1 2))

我希望这与(my-func 1 2)的计算结果相同,但却抛出了一个不匹配的错误,即它需要一个参数,但得到了2个参数。

如果my-func是可变的,它为什么要期待一个参数?这与作为参数的句法对象的数量有关还是与其他因素有关?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2021-01-24 19:09:48

在Racket中,values构造多个返回值(通常是缩写)。作为多个值或值)。除单个值的情况外,不能将值作为参数传递。值不能保存在变量中。当从函数返回时,以及在诸如define-values等形式中使用时,值通常是有用的。有关更多细节,请参见球拍参考的本节

要使用上述链接中的术语,(my-func [])是只接受单个值的延续。这就是为什么在您的程序中,它错误的消息“期望一,得到二”。

你想要做的事情可以用call-with-values来完成

代码语言:javascript
复制
(call-with-values (lambda () (values 1 2)) my-func)
票数 5
EN

Stack Overflow用户

发布于 2021-01-26 22:54:46

或做:

代码语言:javascript
复制
(let-values [(a b) (values 1 2)]
  (my-func a b))

不幸的是,不能将变量数量的值捕获到一个变量中。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65873698

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档