问题标签 [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 回答
113 浏览

parameters - 按值传递和按名称传递的输出

当 x 和 y 按值传递以及按名称传递时,我需要找到以下代码的结果。

如果 x 和 y 按值传递,这是我得出的结论:输出:13、11、11、3 第二输出:1、3、3、11。如果这是错误的,请帮助我理解原因。

从我看到的示例中,我也不确定在此代码中传递名称将如何工作。也请帮忙。

假设静态范围。

0 投票
1 回答
56 浏览

scala - 如何在scala中调用一个调用“按名称”作为参数的函数

我对 scala 还很陌生,仍处于学习的早期阶段。我正在阅读一篇文章,其中有一个这样的例子:

注意

  • 职位是一个(Int,Int)
  • 路径是一个List( Position )

据我了解,这种方法将成立:

  • list of positions

  • Option[Path]

并将返回Option[Path]

我不明白的是我们应该如何调用这个方法?

我试过这个:

example(Nil, Option( 0,0 ) )

0 投票
1 回答
250 浏览

c++ - 将选项(子集)传递给函数的 C++ 优雅方式

我有一个函数,其确切行为由一组标志控制。其中大多数通常是错误的。将它们全部作为参数很快就会变得非常混乱。

我可以为标志创建一个枚举:

更好一点:现在,在调用函数时,我只需要指定我想要设置的值,而不是一长串bools。

但是,我想知道是否有更优雅或更通用的方式将选项子集传递给函数。如果我有非布尔选项怎么办?

我正在寻找一种 C++(Boost 可以)方法来调用如下函数:

我可以省略所有我想保留默认值的值。

为此存在哪些技术和/或库?

0 投票
1 回答
27 浏览

scala - 什么触发 Try 参数被评估

我正在修补 Try,根据这个:

虽然它可以正常工作,正如我希望/打算的那样,但我有一种不安的感觉,我无法确切地确定“Source.fromFile(s)”部分实际上是如何被评估的。Try.apply 方法的参数被记录为按名称参数,因此显然必须强制对其进行评估。

但是,在我看来,下一个操作将是“t match”部分,这是查看 Try.apply 创建的对象类型,如果尚未创建对象,则无法工作,如果不评估要应用的参数,就无法创建它。在这种情况下,我首先看不出这个论点有任何意义。

或者,也许案例类的行为本质上是惰性的?或者,也许我只是遗漏了一些明显的东西。

有人介意为我澄清一下吗?

0 投票
0 回答
25 浏览

pass-by-reference - 半 C 代码中的参数传递策略

这是我的任务中的一个问题。以下代码用半 C 语言编写。为 f、g 和 h 函数设置参数传递类型,以便在执行结束时有 29、34 和 43。例如,要获取 29,我们必须在 f、g 和 h 中使用按值调用。但我不知道我应该为 34 和 43 做什么?

0 投票
2 回答
192 浏览

scala - Scala 中的按名称参数

从“Scala编程”一书中:

使用空参数列表很尴尬。Scala 提供了 by-name 参数来解决这个问题。

我在这个讨论中感到困惑。myAssert 接受一个作为函数的参数,而该函数又不接受任何参数并返回一个布尔值。

byNameAssert 的输入类型是什么?它与 myAssert 相同吗?对我来说,它似乎是一个计算结果为布尔值的表达式,并且以名称形式表示意味着表达式在被调用时被计算,而不是在被传递给时被计算byNameAssert。但是它与 myAssert 的输入类型不同。如果是这样的话,那么 byNameAssert 和 myAssert 就完全不同了。

0 投票
2 回答
167 浏览

scala - 是否已经使用按名称传递参数实现了 while 循环?: 斯卡拉

Scala Tour Of Scala 文档以 whileLoop 函数为例解释了按名称传递的参数。

该部分解释说,如果不满足条件,则不评估主体,从而通过不评估未使用的代码主体来提高性能。

Scala 的实现是否while已经使用了按名称传递的参数?

如果有原因或特定情况下实现无法使用按名称传递的参数,请向我解释,到目前为止我还没有找到任何相关信息。

编辑:根据Valy Dia(https://stackoverflow.com/users/5826349/valy-dia)的回答,我想添加另一个问题......

如果在某些情况下根本不评估主体,while 语句的方法实现会比语句本身更好吗?如果是这样,为什么要使用 while 语句呢?

我将尝试对此进行测试,但我是 Scala 新手,因此可能需要一些时间。如果有人愿意解释,那就太好了。

干杯!

0 投票
2 回答
1642 浏览

typescript - Typescript 通过引用传递属性

我有一个具有 4 个不同属性的 Typescript 类,如下所示:

我想创建四个增加这些属性的函数:

但是,我不想++重复增量逻辑 ( ),我想将它放在一个函数中。如果 Typescript 有像 C# 这样的 ref 参数,我会这样做:

Typescript 不支持通过引用传递。实现这一点的非类型安全方法是:

它不是类型安全的。我可以轻松调用increment('not-a-property')而不会从编译器中得到错误。我添加了运行时检查以确保 self[p] 确实是一个数字,但我仍然想要编译器可以捕获的东西。

有没有一种类型安全的方式来实现这一点?

注意:显然我的实际代码并没有增加数字,而是做了一些非常复杂的事情——不是在数字上,而是在另一个类类型上。

0 投票
1 回答
26 浏览

parameters - 通过名称传递评估变量

我正在学习参数传递。

我一直在研究一个关于参数传递的问题,但我不明白一个问题。

我搜索了互联网,但没有参数是表达式的示例。

如果它是一个表达式,我可以知道如何评估 pass-by-name 吗?

问题如下。

0 投票
1 回答
75 浏览

scala - : => 方法参数声明中的语法是什么意思?

因此,在阅读有关Scala 中隐式类的 Scala 之旅时,我遇到了这段代码:

令我困扰的是这def times[A](f: => A): Unit = {条线。这里发生了什么?函数类型参数的部分A,我理解,但我无法完全理解这(f: => A)部分是什么。是否表示 f 是一个接受任何类型/数量的参数并返回 A 类型对象的函数?

因此,这种结构是否有效地意味着一个接受任何参数并返回我想要的任何东西的函数?