加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

如何判断Perl代码中的一组parens是作为分组parens还是组成列表?

发布时间:2020-12-15 21:53:00 所属栏目:大数据 来源:网络整理
导读:在perl中,括号用于覆盖优先级(如在大多数编程语言中)以及用于创建列表.如何判断一对特定的parens是被视为分组构造还是单元素列表? 例如,我很确定这是一个标量而不是单元素列表:(1 1) 但是更复杂的表达呢?有简单的说法吗? 解决方法 这里有三个关键原则:
在perl中,括号用于覆盖优先级(如在大多数编程语言中)以及用于创建列表.如何判断一对特定的parens是被视为分组构造还是单元素列表?

例如,我很确定这是一个标量而不是单元素列表:(1 1)
但是更复杂的表达呢?有简单的说法吗?

解决方法

这里有三个关键原则:

语境是王道.您的示例(11)的评估取决于上下文.

$x = (1 + 1); # Scalar context. $x will equal 2. Parentheses do nothing here.
@y = (1 + 1); # List context. @y will contain one element: (2).
              # Parens do nothing (see below),aside from following 
              # syntax conventions.

在标量上下文中,没有列表这样的东西.要查看此内容,请尝试将看似列表的内容分配给标量变量.考虑这一点的方法是关注逗号运算符的行为:在标量上下文中,它评估其左参数,抛出该值,然后计算其右参数,并返回该值.在列表上下文中,逗号运算符将两个参数都插入到列表中.

@arr  = (12,34,56); # Right side returns a list.

$x    = (12,56); # Right side returns 56. Also,we get warnings
                      # about 12 and 34 being used in void context.

$x = (@arr,7);       # Right side returns 7. And we get a warning
                      # about using an array in a void context.

括号不会创建列表.逗号运算符创建列表(假设我们在列表上下文中).在Perl代码中键入列表时,出于优先级原因需要使用括号 – 不是出于列表创建原因.几个例子:

>括号无效:我们正在用标量计算数组
上下文,所以右侧返回数组大小.

$x = (@arr);

>创建包含一个元素的列表不需要括号.

@arr = 33;         # Works fine,with @arr equal to (33).

>但是由于优先原因,需要多个项目的括号.

@arr = 12,56; # @arr equals (12). And we get warnings about using
                   # 34 and 56 in void context.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读