perl – 在标量上下文中是否存在列表?
my $mind = ( 'a','little','confused' ); 这是因为
我理解这意味着在标量上下文中没有列表这样的东西. 但是,ikegami认为它是“result[s] in a list operator,so it is a list literal.” 那么,它是否是一个列表? 解决方法
列表文字实际上是在代码中写出的列表,因此(1,2,3)是列表文字,而调用者例如是可以根据上下文返回列表或标量的函数.
在一行中: my $x = ...; …看到标量上下文,所以如果…是一个列表文字,那么你将在标量上下文中有一个列表文字: my $x = (1,3); 但是列表文字不会产生列表,因为它包含的逗号运算符会看到标量上下文,然后导致它返回列表文字的最后一项,并在评估它们之后抛弃剩余的值. 就函数而言,函数本身可以看到它被调用的任何上下文,然后它被传播到返回的函数中的任何行.因此,您可以在标量,列表或无效上下文中使用函数,如果该子集的最后一行恰好是列表文字,则该列表文字将看到任何这些上下文并且将表现得恰当. 所以基本上这是术语的区别,列表文字引用实际源代码*中逗号分隔的值列表,列表引用放在perl堆栈上的值序列. 您可以编写具有返回值的子例程,这些返回值的行为类似于数组或类似于上下文的列表文字. sub returns_like_array {my @x = 1..5; return @x} sub returns_like_list {my @x = 1..5; return @x[0 .. $#x]} *或导致逗号分隔值列表的内容,如qw()或fat逗号=>或散列或数组切片. 您也可以在这里查看我的答案:How do I get the first item from a function that returns an array in Perl?,它详细介绍了列表. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |