问题标签 [eta-expansion]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
575 浏览

scala - Partial function application prematurely runs codeblock when used with underscore

Given:

I can call it with:

Here's the curious behaviour with partial application:

The codeblock is evaluated immediately without being passed in as a function. What is the difference between the above 2 statements?

0 投票
2 回答
8468 浏览

scala - Scala 中的 eta 扩展是什么?

我是 Scala 的新手。刚刚听说过“eta扩展”这个词,大致知道就是将一个方法扩展为一个函数对象。但我在 SO 中发现很少有系统地介绍它的资源。

我很好奇 eta 扩展如何在 Scala 中工作。需要eta扩容的场景有哪些?以及如何在 Scala 中实现eta 扩展?

我大致知道在这种情况下:

someMethod _将大致翻译成一个新的函数对象,如下所示:

这就是 Scala 所做的一切吗?

0 投票
1 回答
144 浏览

scala - 在 Scala 中,使用下划线创建闭包的规则是什么?

起初我认为使用下划线来制作闭包(例如println _)只是使用箭头(例如x => println x)的简写,但我最近才知道您还可以执行以下操作:

鉴于我过去的假设,f _看起来像一个闭包,它只接受一个参数并将一个参数传递给f. 我以为它会告诉我它无法编译,因为f需要两个参数,并且reduce应该需要一个带有两个参数的函数。但它就像我写的那样工作:

这里发生了什么?用下划线创建闭包的规则是什么?

0 投票
1 回答
34 浏览

scala - 指定方法的方法签名以应用 eta 扩展

有没有办法指定我想应用eta 扩展的方法的签名?

例如:

抛出编译错误:

顺便说一句:eta 扩展是使用_的正确术语吗?

0 投票
3 回答
324 浏览

scala - 在 map 方法中调用匿名函数

当我意识到我的 IDE 指出了类型差异时,我正在创建一个具有多个可能参数的构造函数:

所以我尝试只传递col函数。

它有效,然后,试图理解为什么,我最终得到:

所以我发现将匿名函数传递给像map这样的方法不会返回结果,而是返回整个函数(因为我想它被视为对象)。

那么,如何在不单独声明的情况下使这项工作成为 Column 而不是函数类型呢?

0 投票
2 回答
124 浏览

scala - foreach(println) 和 foreach(println()) 有什么区别?

我有一个字符串数组:

为什么str.foreach(println)工作没有问题,但str.foreach(println())没有?
println等于println()which 返回一个Unit值吗?

0 投票
1 回答
42 浏览

scala - 当函数值本身不是函数值时,为什么可以在预期函数值的地方使用 scala 函数名称?

为什么可以f在期望函数值的地方使用,即使它本身不是函数值?

0 投票
1 回答
265 浏览

haskell - Haskell - Eta 减少和 Eta 扩展

我一直在研究功能程序优化,并且一直在挖掘 GHC 源码。我(大部分)了解什么是 eta 缩减和 eta 扩展。Eta 减少只删除多余的 lambda:

Eta 扩展与 eta 减少相反,它会做这样的事情(如果我不正确,请纠正我):

我没有得到的是他们如何不妨碍彼此并将编译器送入无限循环。例如,首先对一个值进行 eta 扩展,然后对它进行 eta 缩减,以此类推。那么,这两种优化如何不相互影响呢?

0 投票
0 回答
84 浏览

scala - 为什么多态方法的eta扩展不会产生多态函数值?

Scala 2 没有多态函数值,因此 eta 扩展多态方法只给出

然而 Scala 3 确实具有多态函数值,所以为什么 eta 扩展多态方法不提供更多