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

6

在一些编程语言中,如果一个函数返回一个数组,那么与将数组存储在变量中然后检索单个元素相反,可以像这样直接检索:

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

您可以直接在函数调用后使用数组索引表示法来检索返回数组的元素,如下所示:
var firstElement = getSomeValues()[0];

这个结构或语法被称为什么?它有特殊的名称吗?

1
@Gordon:再想想,我觉得这不完全是一个重复的问题,因为我在问它的名称,而那个问题是在问为什么它不能在PHP中工作。但好吧,至少现在我知道它的名字了。 - BoltClock
@BoltClock 是的,但是通过阅读其他问题,您可以得到您的答案,因此虽然它在语义上不是重复的,但它包含足够的信息来回答您的问题。 - Gordon
1
@BoltClock 很抱歉在这里打破你的幻想,但是:http://odata.stackexchange.com/stackoverflow/q/10631/。不是第一个 ;) - Yi Jiang
5个回答

3

You can use the array index notation directly on the function call to retrieve the element

var firstElement = getSomeValues()[0];
你正在访问函数返回的数组/集合的索引元素。你并没有直接访问函数中的索引位置。
我会称之为将索引器“链接”到返回值上。

是的,我就是那个意思。我在问题中应该表述更清楚。 - BoltClock
@BoltClock - 所以如果我理解正确,我的答案不是你想要的? - ChaosPandion
@ChaosPandion:我自己也不确定,因为我在问,但如果你认为是这样,那就这样吧。 - BoltClock
@BoltClock - 抱歉,早上我有点慢。啊,我在开玩笑,我总是很慢。 :) - ChaosPandion
@ChaosPandion:顺便说一下,那个给你的回答点赞的实际上是我自己的 :) - BoltClock

2

数组解引用


1

我使用术语查找


1

嗯...危险...??

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

当涉及到处理数组时,这是一个不好的习惯,JavaScript除外,如评论所述。

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


2
好的,但只是为了明确起见,在像JavaScript这样的语言中,这不会有危险。除非当然你尝试将“undefined”返回值作为函数调用。 - ChaosPandion

1

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

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

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 *)

更通用的概念是“模式匹配”(有关模式匹配的更多信息),上面展示的只是一个特例。在一些函数式语言中(不包括上述任何一种,但例如在Haskell中),情况是不同的:它确实只计算第一个元素,并且不会使列表的其余部分被评估。
然而,在您展示的过程式代码中,没有任何可以称之为模式匹配的东西。

感谢您的详细解释和函数式编程示例。+1 - BoltClock
sequence.First() 会对应哪个 .NET 调用? - ChaosPandion

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接