当前位置: 首页 > 面试题库 >

为什么速记参数名$ 0返回所有参数的元组?

聂炜
2023-03-14
问题内容

我试图定义一个可以容纳闭包的变量,并且使用Swift的速记参数名称遇到了一些困难。采取以下代码段:

var returnAString: (String, String) -> String
returnAString = { return $0 }

这给了我编译错误 ‘(String,String)’无法转换为’String’
。当我修改闭包时,返回带有第一个参数值的字符串,我将两个参数值都返回到一个元组中。

println(returnAString("1", "2")) // Prints "(1, 2)"

但是,如果我修改闭包以打印第二个参数,则会按预期打印正确的参数。

returnAString = { $1 }
println(returnAString("1", "2")) // Prints "2"

我感觉自己在这里做些愚蠢的事情,但是我找不到任何解释为什么会发生这种情况。


问题答案:

闭包§速记参数名称

速记参数名称

…速记参数名称的数量和类型将从预期的函数类型中推断出来。

看起来这是预期的行为。通过仅提供$0(至少是向系统)推断您想要元组。

这似乎只是使用的一种特殊情况$0。例如,以下内容无法编译。

var returnAString3: (String, String, String) -> String
returnAString3 = { return $1 }

无论如何修改。

returnAString3 = { return $1.0 } // still fails.


 类似资料:
  • 问题内容: 命名函数的返回参数有什么好处? 问题答案: 命名它们有一些好处: 它用作文档。 它们会自动声明并初始化为零值。 如果您有多个返回站点,则更改函数的返回值并不需要全部更改,因为它只会显示“ return”。 还有缺点,主要是很容易通过声明相同名称的变量来意外地遮盖它们。 有效的Go中有一个关于命名结果参数的部分: 可以给Go函数的返回或结果“参数”指定名称,并将其用作常规变量,就像传入参

  • 问题内容: 在我的工作中,我们有一个使用AngularJS创建的一页站点。 我们正在使用ui-router插件(版本0.2.0)。 最近,我注意到从一种状态切换到另一种状态时,该窗口不会滚动到顶部。 我什至尝试在每次状态更改(使用事件)时使用jQuery的功能将其手动滚动到顶部。但这没有用。 因此,我开始进行调查,并且注意到页面上的每个元素都返回0。 不仅如此,当我将其打印到控制台时,我得到0(无

  • 我想检查一个数字是否是正方形,一个数字是否是三角形。问题发生在sqrt(num)上,它为我测试的所有数字返回0 我正在使用一个在线编译器,尝试了几个编译器,所以这不是一个编译问题。尝试将num声明为double和int,结果相同 我是Java新手,但对编程并不陌生,我在网上搜索了几次,检查了我的代码,一切看起来都很好,在添加用于检查三角数的变量之前,它甚至按预期工作,但在声明变量checkTri和

  • 我试图发出一个静音命令,我正在添加一个系统,在这个系统中,你可以出于某种原因将它们静音。机器人将回复“(用户用户名)已禁用。原因:(原因)”。对我来说,args[0]只是提到了要禁用的用户,但我不知道如何获取args[0]之后的所有内容。我试过做类似于。但这显然不起作用-我有点猜测-我转向清单4这样的参数。 但显然,这不是很有效——有人知道如何获取args[0]之后的所有参数吗?

  • 我知道(-0==0)是真的。我很想知道为什么-0 当我在stackoverflow执行上下文中运行这段代码时,它返回。 但是当我在浏览器控制台中运行相同的代码时,它返回。那是为什么呢?我试图在谷歌上搜索它,但没有找到任何有用的东西。这个问题可能不会给某个人的实际例子增加价值,我想了解JS是如何计算它的。

  • 问题内容: 我有这样的事情: 而且我总是得到“时钟周期为:0-0”的输出 知道为什么会这样吗? (仅给出一点点细节,something_else()函数使用蒙哥马利表示法执行从左到右的求幂运算,而且我不确定不确定something_else()函数确实花费了一些不可忽略的时间。) 这是在Linux上。uname -a的结果是: 问题答案: 该功能不测量CPU时钟周期。 C说: “ 从实现定义的仅与