亚洲av成人无遮挡网站在线观看,少妇性bbb搡bbb爽爽爽,亚洲av日韩精品久久久久久,兔费看少妇性l交大片免费,无码少妇一区二区三区

  免費(fèi)注冊(cè) 查看新帖 |

Chinaunix

  平臺(tái) 論壇 博客 文庫(kù)
12下一頁(yè)
最近訪問板塊 發(fā)新帖
查看: 3084 | 回復(fù): 13
打印 上一主題 下一主題

【再次求解】一個(gè)幾天前讓我出bug的函數(shù) [復(fù)制鏈接]

論壇徽章:
0
跳轉(zhuǎn)到指定樓層
1 [收藏(0)] [報(bào)告]
發(fā)表于 2010-11-13 15:24 |只看該作者 |倒序?yàn)g覽
這里我就只寫一個(gè)原型
use warnings;
use strict;
use Data:umper;
use Time::HiRes;

sub foo {
    for my $i ( 1..5 ) {
        my $bar = 2 if $i == 2;
        
        if ( !defined($bar) ) {
            $bar = 4 if $i % 2;
        }
        
        print $bar || '', "\n";
    }
}

foo();

這個(gè)輸出應(yīng)該是什么呢:
4
2
4
4
4
還是
4
2
4

4
為什么?

論壇徽章:
0
2 [報(bào)告]
發(fā)表于 2010-11-13 15:26 |只看該作者
如果這樣寫
sub foo {
    for my $i ( 1..5 ) {
        my $bar;
        $bar = 2 if $i == 2;
        
        if ( !defined($bar) ) {
            $bar = 4 if $i % 2;
        }
        
        print $bar || '', "\n";
    }
}

foo();

輸出肯定是比較明確的

論壇徽章:
0
3 [報(bào)告]
發(fā)表于 2010-11-13 16:14 |只看該作者
一樓的程序,肯定有問題,在$bar沒有定義的情況下,用!defined($bar)判斷,容易出錯(cuò)很正常,是你自己的邏輯錯(cuò)誤,程序結(jié)果并沒錯(cuò)。

在$i為1時(shí),你將全局變量(因?yàn)槟闶孪炔]有聲明這個(gè)變量)$bar的值變成了4,$1為2時(shí),my $bar生效,變?yōu)?,雖然名稱相同,但它只是在FOR內(nèi)的局部變量,并沒有覆蓋全局變量,所以$1為3,4,5時(shí),print $bar 的輸出都是全局變量$bar的值。

論壇徽章:
0
4 [報(bào)告]
發(fā)表于 2010-11-13 16:19 |只看該作者
但是我用了use strict,沒有聲明的全局變量是允許的嗎?
如果這樣允許的話,那說(shuō)明use strict還是有缺陷的

論壇徽章:
0
5 [報(bào)告]
發(fā)表于 2010-11-13 16:28 |只看該作者
use strict并非萬(wàn)能,my $bar = 2 if $i == 2這里可能讓它誤認(rèn)為聲明了吧,養(yǎng)成好習(xí)慣,出錯(cuò)的概率就會(huì)降低很多。

水平有限,說(shuō)不出所以然,請(qǐng)樓下的高手解釋。

論壇徽章:
0
6 [報(bào)告]
發(fā)表于 2010-11-13 16:33 |只看該作者
我也是覺得my $bar = 2 if $i == 2對(duì)use strict使了障眼法。
這個(gè)bug我曾經(jīng)頭疼了很久,后來(lái)終于查出來(lái)了,呵呵。

論壇徽章:
46
15-16賽季CBA聯(lián)賽之四川
日期: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
7 [報(bào)告]
發(fā)表于 2010-11-13 19:25 |只看該作者
本帖最后由 zhlong8 于 2010-11-13 20:17 編輯

很簡(jiǎn)單,這樣用根本就是錯(cuò)的,文檔說(shuō)的很清楚。ActivePerl 自帶的 perlcritic 可以檢查這種錯(cuò)誤,而 strict 查檢末聲明變量是在編譯期進(jìn)行的。

perlsyn
NOTE: The behaviour of a my statement modified with a statement modifier conditional or loop construct (e.g. my $x if ... ) is undefined. The value of the my variable may be undef, any previously assigned value, or possibly anything else. Don't rely on it. Future versions of perl might do something different from the version of perl you try it out on. Here be dragons.

論壇徽章:
0
8 [報(bào)告]
發(fā)表于 2010-11-15 14:35 |只看該作者
看說(shuō)明是說(shuō)perl也還沒定對(duì)于這個(gè)寫法該怎么處理。
所以其實(shí)應(yīng)該歸于perl的一個(gè)缺陷,他應(yīng)該明確該怎么處理,如果確定不那么處理,就告訴我那樣寫是錯(cuò)的。

論壇徽章:
1
2015年辭舊歲徽章
日期:2015-03-03 16:54:15
9 [報(bào)告]
發(fā)表于 2010-11-15 14:52 |只看該作者
看說(shuō)明是說(shuō)perl也還沒定對(duì)于這個(gè)寫法該怎么處理。
所以其實(shí)應(yīng)該歸于perl的一個(gè)缺陷,他應(yīng)該明確該怎么處理 ...
yiten 發(fā)表于 2010-11-15 14:35

未定義行為這個(gè)術(shù)語(yǔ)很常見吧。

論壇徽章:
145
技術(shù)圖書徽章
日期:2013-10-01 15:32:13戌狗
日期:2013-10-25 13:31:35金牛座
日期:2013-11-04 16:22:07子鼠
日期:2013-11-18 18:48:57白羊座
日期:2013-11-29 10:09:11獅子座
日期:2013-12-12 09:57:42白羊座
日期:2013-12-24 16:24:46辰龍
日期:2014-01-08 15:26:12技術(shù)圖書徽章
日期:2014-01-17 13:24:40巳蛇
日期:2014-02-18 14:32:59未羊
日期:2014-02-20 14:12:13白羊座
日期:2014-02-26 12:06:59
10 [報(bào)告]
發(fā)表于 2010-11-15 15:02 |只看該作者
看說(shuō)明是說(shuō)perl也還沒定對(duì)于這個(gè)寫法該怎么處理。
所以其實(shí)應(yīng)該歸于perl的一個(gè)缺陷,他應(yīng)該明確該怎么處理 ...
yiten 發(fā)表于 2010-11-15 14:35


如果你要的是解釋...樓上的幾位都指出來(lái)了......
由其最后一句: "Here be dragons"


如果你要解決真正的問題.....

There's more than one way to do it

重述你(真正)的問題? (你要的功能或結(jié)果)

我們可以找更好,更不會(huì)出錯(cuò)的方法......
您需要登錄后才可以回帖 登錄 | 注冊(cè)

本版積分規(guī)則 發(fā)表回復(fù)

  

北京盛拓優(yōu)訊信息技術(shù)有限公司. 版權(quán)所有 京ICP備16024965號(hào)-6 北京市公安局海淀分局網(wǎng)監(jiān)中心備案編號(hào):11010802020122 niuxiaotong@pcpop.com 17352615567
未成年舉報(bào)專區(qū)
中國(guó)互聯(lián)網(wǎng)協(xié)會(huì)會(huì)員  聯(lián)系我們:huangweiwei@itpub.net
感謝所有關(guān)心和支持過ChinaUnix的朋友們 轉(zhuǎn)載本站內(nèi)容請(qǐng)注明原作者名及出處

清除 Cookies - ChinaUnix - Archiver - WAP - TOP