首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >R中匿名函数求值的解析

R中匿名函数求值的解析
EN

Stack Overflow用户
提问于 2018-03-29 06:36:15
回答 1查看 72关注 0票数 0

这可能与懒惰评估有关,但这绝对不是我所期望的。它也可能与在每个输入行的末尾生成隐式分号的行为有关。

代码语言:javascript
复制
> (function(x) x * 10)(10)
[1] 100

期望的。

代码语言:javascript
复制
> function(x) x * 10
function(x) x * 10

期望的。

代码语言:javascript
复制
> (function(x) x * 10)
function(x) x * 10

在这里,他去掉了()并进行了计算,假设没有实际数据可遵循

代码语言:javascript
复制
> (function(x) x * 10
+ )(10)
[1] 100

省略结束语),然后他等待它和实际情况。

代码语言:javascript
复制
> (function(x) x * 10)
function(x) x * 10
> (10)
[1] 10

但如果)在同一行上,则不会。

代码语言:javascript
复制
> (function(x) x * 10)(
+ 10)
[1] 100

但是对于实际情况,(可以放在第一行,并且行为是预期的。

我原本期望解析器识别正在进行的匿名函数调用(f(x)),并将计算推迟到指定参数之后。如果行中的最后一项是(,但如果(是下一行中的第一项,则不会执行此操作。

因此,基本上这些)(必须在第一行或第二行一起,才能识别正在进行的匿名调用。从某种意义上讲,应该是显式的;像perl一样终止,等等。

这个例子对于exposition来说有点微不足道。一个人可以把所有的东西放在一行上,然后就完成了。当试图维护一种函数式编程风格时,这个问题就不那么微不足道了,在这种风格中,参数不是10,而是另一个(或多个)匿名函数的输出。

EN

回答 1

Stack Overflow用户

发布于 2018-03-29 06:54:38

与懒惰评估无关。这就是交互式阅读过程的设置方式。它等待,而不是等到函数指定了它们的参数,而是等到有一个完整的表达式将返回值。因为一个函数是一个合法的值,所以它会返回该值。当source-ing from afile时,操作是不同的。该操作没有read-eval-print。它更像是一个parse-eval-act循环。(我以为这是在R-FAQ中,但到目前为止我还没有找到它。在我找到更好的参考资料之前,我建议您参考?source,其中讨论了文件处理和命令行处理之间的区别。)如果您想建立一种避免这种歧义的风格,那么可以在参数列表规范后面使用"{"。(我认为当您搞砸的时候,它会给您更多的信息。)

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

https://stackoverflow.com/questions/49545260

复制
相关文章

相似问题

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