这种语法 getSomeValues()[0] 有名称吗?

Posted

技术标签:

【中文标题】这种语法 getSomeValues()[0] 有名称吗?【英文标题】:Is there a name for this syntax getSomeValues()[0]? 【发布时间】:2011-03-22 16:00:54 【问题描述】:

在某些语言中,如果函数返回一个数组,那么与将数组存储在变量中然后检索单个元素相反,如下所示:

var someValues = getSomeValues();
var firstElement = someValues[0];

您可以在函数调用之后直接使用数组索引表示法来检索返回数组的元素,如下所示:

var firstElement = getSomeValues()[0];

这种结构或语法是什么?它有一个特殊的名字吗?

【问题讨论】:

它是 Array Dereferencing 和 Access array element from function call in php 的副本 @Gordon:再想一想,我不认为它真的是重复的,因为我问的是它叫什么,而那个问题是问为什么它在 PHP 中不起作用。但是哦,好吧,至少我现在知道它的名字了。 @BoltClock 是的,但您可以通过阅读另一个问题来获得答案,因此虽然它在语义上不是重复的,但它包含足够的信息来回答您的问题。 @BoltClock 很抱歉在这里打破你的泡沫,但是:odata.stackexchange.com/***/q/10631。不是第一个;) 【参考方案1】:

我使用术语查找

【讨论】:

【参考方案2】:

您可以在函数调用上直接使用数组索引表示法来检索元素

var firstElement = getSomeValues()[0];

您正在做的是访问函数返回的数组/集合的索引元素。您不是直接访问函数中的索引。

我将这种“链接”称为返回值的索引器。

【讨论】:

是的,我确实是这个意思。我的问题应该更清楚。 @BoltClock - 所以如果我理解正确,我的答案不是你要找的吗? @ChaosPandion:既然我在问,我不确定自己,但如果你理解它是这样的,那就这样吧。 @BoltClock - 抱歉,我早上有点慢。啊,我在开玩笑,我总是很慢。 :) @ChaosPandion:为了记录,对你的答案的支持实际上是我的:)【参考方案3】:

呃.. 危险...??

如果返回的数组中没有元素。

在处理数组时养成一个坏习惯,根据评论将 javascript 放在一边。

除此之外,这个想法被称为“方法链

【讨论】:

好的,但要明确的是,这在 JavaScript 这样的语言中并不危险。当然,除非您尝试将 undefined 返回值作为函数调用。【参考方案4】:

我相信它没有任何特殊的名称。您只是在访问返回的数组的第一个元素。在许多语言中,返回数组的函数没有什么特别之处。

在您的情况下,您没有[](索引)运算符应用于函数调用。相反,您将其应用于返回的数组。优先,它看起来像这样。

var firstElement = ( getSomeValues() )[0];

所以没有什么特别之处。


但是,还有另一种获取第一个元素的模式,与函数式编程有关。例如:

($first_value, @rest_of_list) = getSomeValues();  # Perl
let first::rest = getSomeValues () in ...         (* OCaml *)

这会将列表的第一个值(从技术上讲,不是数组)保存到$first_value,其余的存储在数组变量中。该数组变量可能会被省略,然后您只会得到第一个值。

($first_value) = getSomeValues();        # Perl
let first::_ = getSomeValues () in ...   (* OCaml *)

更通用的概念是模式匹配 (more on pattern matching),上面显示的只是一个特例。在某些函数式语言中(上面没有显示,但在 Haskell 中,例如)它是不同的:它确实只计算第一个元素,而不是评估列表的其余部分。

但是,在您展示的程序代码中,根本没有任何东西可以称为模式匹配。

【讨论】:

感谢您的详尽解释,函数式编程示例。 +1 sequence.First() 将是等效的 .NET 调用吗?【参考方案5】:

数组解引用

【讨论】:

以上是关于这种语法 getSomeValues()[0] 有名称吗?的主要内容,如果未能解决你的问题,请参考以下文章

这种奇怪的 C++ 语法有啥作用? [复制]

三元运算符;这种语法有啥问题?

Alamofire:这种语法有啥问题? “通话中的额外参数”

对于循环 [类似 C/java 的语法]

常用es6语法总结

Hibernate @Where 注释语法问题