42、42.0、“42.0”、“42”之间有什么区别吗

2024-02-15

在使用“Smart Match(~~)”测试我的 Perl 代码的过程中,我遇到了这个问题。 42、42.0、“42.0”、“42”之间有什么区别吗

$var1 = "42";
$var2 = "42.0";
$a = $var1 ~~ $var2;

我正进入(状态$a为 0;意思是$var1 and $var2不相等。

请解释。


智能匹配操作员“通常会做你想做的事”。请将此理解为“并非总是”。

42 ~~ 42.0返回真。

42 ~~ "42.0"也返回 true:字符串与数字进行比较,因此被视为数字。同上"42" ~~ 42.0.

"42" ~~ "42.0"返回 false:两个参数都是字符串,并且这些字符串不比较为“相等”,尽管它们的数字含义会。你不希望 Perl 查看"two" ~~ "two-point-oh"是真的。

可以通过添加零来强制字符串进行数字解释:

0+"42" ~~ "42.0"再次返回 true,因为第一个字符串被强制为数字42,第二个也效仿。

The perldoc perlsyn or perldoc perlop page http://perldoc.perl.org/perlop.html#Smartmatch-Operator定义智能匹配的工作原理:

       Object  Any       invokes ~~ overloading on $object, or falls back:
       Any     Num       numeric equality         $a == $b
       Num     numish[4] numeric equality         $a == $b
       undef   Any       undefined                !defined($b)
       Any     Any       string equality          $a eq $b

您可以看到字符串相等是默认的。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

42、42.0、“42.0”、“42”之间有什么区别吗 的相关文章

随机推荐