问题标签 [pass-by-name]

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 投票
1 回答
44 浏览

scala - 我应该如何理解这个定义“final def fold[B](ifEmpty: => B)(f: (A) => B): B”

我知道这个问题可能很愚蠢。

我只是发现自己很难理解linkfold的定义。Scala Option

谁能帮我理解定义部分?final def fold[B](ifEmpty: => B)(f: (A) => B): B

什么(ifEmpty: => B)意思,ifEmpty这里代表一个功能吗?右边的部分=> B代表什么?它代表一个没有任何参数的函数吗?应该是这样() => B吗?

0 投票
1 回答
84 浏览

scala - 为什么这个迭代器无限循环?

我正在尝试链接Iterators

hasNext正如您在此处看到的那样,这无限循环: https ://scastie.scala-lang.org/qbHIVfsFSNO5OYmT4pkutA

如果您运行它并在堆栈无限循环时检查堆栈,它会在内容循环中循环:

(此堆栈来自 Scala 2.12.11,但 Scastie 链接在 中显示相同的行为2.13.2)。

我知道在对其调用方法之后永远不应该使用迭代器,但这似乎对我有用。使用varto 指向“当前”迭代器并将其更改为指向一个新迭代器,该迭代器附加前一个迭代器的其余部分。

以下轻微修改确实有效:

Scastie 链接:https ://scastie.scala-lang.org/1X0jslb8T3WIFLHamspYAg

这向我表明,以某种方式损坏的版本正在创建一个附加自身的迭代器。关于这里发生了什么的任何提示?

0 投票
1 回答
36 浏览

pass-by-reference - 按名称调用会影响传递给函数的参数变量,如按引用调用还是按值调用?

假设我有一个整数数组 a

和没有特定语言的功能

如果我执行,我的数组 a 的最终值是多少

在按值调用、按引用调用和按名称调用?

我认为按值调用会给我相同的整数数组 a = [1,2,3] 因为函数内的更改对传入的参数没有影响。

并且通过引用调用会给我结果a = [1,1,3],那么按名称调用呢?你能告诉我评估的步骤吗,我只知道到目前为止它会将 i 和 a[i] 直接传递到函数调用中,但不知道会受到什么影响。

编辑:我误读了问题,数组 a应该是a = [1,2,3]最初而不是a= [10,20,30]

0 投票
0 回答
72 浏览

scala - 从 `=> T` 到​​ `() => T` 再返回

作为 types=> T() => Tare both的参数Function0,我总是天真地假设从一个到另一个的转换是无用的。然而,看起来,虽然对于 是正确的(=>T) => (() => T),但另一个方向(() => T) => (=> T)导致将函数的执行包装在invokedynamiclambda 中 - 至少就我可以读取字节码而言。

  1. 为什么?
  2. 我怎样才能让它停止?