2012-11-27 34 views
6

例如,在“Perl编程”,有句比如这个:运算符在Perl中绑定是什么意思?

这些字符串操作符绑定尽可能紧它们对应的算术运算符。

在其他地方,无论是在“PP”还是在perldoc中,作者都​​使用诸如“紧密结合”等措辞;例如,当提到**(指数)时,指的是=〜或“更紧密地结合”。

如果这与优先级相同,我猜测不可能说“更紧密”。你会说“更高/更低的优先顺序”。

那么运营商绑定到底意味着什么呢?

+0

TLP,我提到特定运营商在过去的两个实例。对于引用的第一句话,操作符是乘法(*)和字符串乘法(x)。我很困惑的是用词的选择来描述运算符的优先级(如果这是事实),所以我的问题。 – minya

+3

我很确定它的优先顺序。 – TLP

回答

8

这是指运算符的优先级。在声明中

a = b + c * d 

乘法具有更高的优先级,因此“绑定”比加法更紧密。

更紧密绑定的运算符在紧密绑定的运算符之前进行评估。

+0

同样感谢澄清动词绑定的人的语义的人,但后来删除了评论;并感谢@TLP花时间来解释。 – minya

6

您可以查看文档中的precedence list,并将其与您阅读的文本进行比较。不过,我确信他们正在谈论优先权。

优先权是一种绑定形式,它将不同强度的参数“粘”在一起。一个常见的错误的人做,例如,使用:

open my $fh, "<", "input.txt" || die $!; 

这是一个沉默而致命的错误,因为||“结合更紧密” /比逗号,运营商更高的优先级,所以这个表达式变成:

open my $fh, "<", ("input.txt" || die $!); 

而且由于字符串“input.txt中”始终是真实的,不管是什么,因为它是一个常数,是从未使用过的die声明。因此,open声明可能因此失败,从而导致难以发现错误。

(该溶液是使用低优先级操作者or代替||,或作为mob所指出的,通过使用括号覆盖优先级。)

+0

或者,自TMTOWTDI以来,解决方案是使用括号。 – mob

+0

@mob嗯,这是一个上下文相关的解决方案。 – TLP