问题标签 [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.
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
吗?
scala - 为什么这个迭代器无限循环?
我正在尝试链接Iterators
:
hasNext
正如您在此处看到的那样,这无限循环: https ://scastie.scala-lang.org/qbHIVfsFSNO5OYmT4pkutA
如果您运行它并在堆栈无限循环时检查堆栈,它会在内容循环中循环:
(此堆栈来自 Scala 2.12.11
,但 Scastie 链接在 中显示相同的行为2.13.2
)。
我知道在对其调用方法之后永远不应该使用迭代器,但这似乎对我有用。使用var
to 指向“当前”迭代器并将其更改为指向一个新迭代器,该迭代器附加前一个迭代器的其余部分。
以下轻微修改确实有效:
Scastie 链接:https ://scastie.scala-lang.org/1X0jslb8T3WIFLHamspYAg
这向我表明,以某种方式损坏的版本正在创建一个附加自身的迭代器。关于这里发生了什么的任何提示?
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]
scala - 从 `=> T` 到 `() => T` 再返回
作为 types=> T
和() => T
are both的参数Function0
,我总是天真地假设从一个到另一个的转换是无用的。然而,看起来,虽然对于 是正确的(=>T) => (() => T)
,但另一个方向(() => T) => (=> T)
导致将函数的执行包装在invokedynamic
lambda 中 - 至少就我可以读取字节码而言。
- 为什么?
- 我怎样才能让它停止?