免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 2001 | 回复: 4

两个语句的结果不同 [复制链接]

论坛徽章:
0
发表于 2015-04-25 07:09 |显示全部楼层
大家好:
为什么以下两个语句的输出结果不同?谢谢!
  1. perl -e '$a=1000; ($a + 2 > 900) ?  $b=$a-90 : ($b=length($a)); print $b;'
复制代码
输出910
  1. perl -e '$a=1000; ($a + 2 > 900) ?  $b=$a-90 : $b=length($a); print $b;'
复制代码
输出4

论坛徽章:
46
15-16赛季CBA联赛之四川
日期:2018-03-27 11:59:132015年亚洲杯之沙特阿拉伯
日期:2015-04-11 17:31:45天蝎座
日期:2015-03-25 16:56:49双鱼座
日期:2015-03-25 16:56:30摩羯座
日期:2015-03-25 16:56:09巳蛇
日期:2015-03-25 16:55:30卯兔
日期:2015-03-25 16:54:29子鼠
日期:2015-03-25 16:53:59申猴
日期:2015-03-25 16:53:29寅虎
日期:2015-03-25 16:52:29羊年新春福章
日期:2015-03-25 16:51:212015亚冠之布里斯班狮吼
日期:2015-07-13 10:44:56
发表于 2015-04-25 11:50 |显示全部楼层
操作符优先级的问题 = 比 ?: 要低。说实话在 ?: 中用稍微复杂点的表达式我都分不清优先级的,所以我不这么用。摘抄 perlop
Conditional Operator

Ternary "?:" is the conditional operator, just as in C.

Scalar or list context propagates downward into the 2nd or 3rd argument, whichever is selected.

$x = $ok ? $y : $z;  # get a scalar
@x = $ok ? @y : @z;  # get an array
$x = $ok ? @y : @z;  # oops, that's just a count!

The operator may be assigned to if both the 2nd and 3rd arguments are legal lvalues (meaning that you can assign to them):

($x_or_y ? $x : $y) = $z;

Because this operator produces an assignable result, using assignments without parentheses will get you in trouble. For example, this:

$x % 2 ? $x += 10 : $x += 2

Really means this:

(($x % 2) ? ($x += 10) : $x) += 2

Rather than this:

($x % 2) ? ($x += 10) : ($x += 2)

That should probably be written more simply as:

$x += ($x % 2) ? 10 : 2;

论坛徽章:
0
发表于 2015-04-25 15:37 |显示全部楼层
本帖最后由 pony2001mx 于 2015-04-25 15:38 编辑

谢谢zhlong8的例子!

回复 2# zhlong8

求职 : 软件工程师
论坛徽章:
3
程序设计版块每日发帖之星
日期:2015-10-07 06:20:00程序设计版块每日发帖之星
日期:2015-12-13 06:20:00程序设计版块每日发帖之星
日期:2016-05-05 06:20:00
发表于 2015-04-25 19:03 |显示全部楼层
虽然三元表达式很酷,但因此出现的错误更酷。我尽量不用三元表达式, 除非在函数返回值中面对很简单的情况:
  1. $x > 10 ? return 0 ! return 1;
复制代码

论坛徽章:
7
戌狗
日期:2013-12-15 20:43:38技术图书徽章
日期:2014-03-05 01:33:12技术图书徽章
日期:2014-03-15 20:31:17未羊
日期:2014-03-25 23:48:20丑牛
日期:2014-04-07 22:37:44巳蛇
日期:2014-04-11 21:58:0915-16赛季CBA联赛之青岛
日期:2016-03-17 20:36:13
发表于 2015-04-27 00:23 |显示全部楼层
zhlong8 发表于 2015-04-25 07:50
操作符优先级的问题 = 比 ?: 要低。


3 Q ~ ~
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP