我在看下面的代碼片段:
my @ret = <someMethod>
return (undef) if($DB_ERROR);
return (undef) unless ($#ret >= 0);
是否$#
只是給你一個數組中元素的計數?
我在看下面的代碼片段:
my @ret = <someMethod>
return (undef) if($DB_ERROR);
return (undef) unless ($#ret >= 0);
是否$#
只是給你一個數組中元素的計數?
$#arrayname
給你的最後一個元素的索引,因此,如果陣列@ret
具有2個元素然後$#ret
是1
而且,正如由Barry布朗,空數組給出-1指出。
爲了讓你可以使用數組在標量上下文長度:
print scalar @ret;
另外,如果@ret中沒有任何內容,$#ret將返回-1。 – 2008-10-27 21:22:55
請注意,$#數組表達式將返回-1,當陣列具有零個元素。
edg是正確的,但原始代碼是不必要的鈍。在大多數情況下,$#foo
是一個紅旗,可以使用scalar @foo
更簡單地編寫代碼。
return (undef) unless ($#ret >= 0);
unless foo >= bar
很難解開。首先,把它變成一個積極的聲明。
return (undef) if ($#ret < 0);
何時是$#ret < 0?當它是-1。 -1 $#RET是長度爲0的數組所以上面可以寫更加簡單的...
return (undef) if scalar @ret <= 0;
但你不能有負長度的數組,所以...
return (undef) if scalar @ret == 0;
和==是在標量環境,讓「標」是多餘的...
return (undef) if @ret == 0;
但是,這是說「如果@ret
是假的」的只是一個羅嗦的方式。
return (undef) if [email protected];
對於簡單語句修飾符,我認爲它更適合於用unless表達。
return (undef) unless @ret;
難道不容易嗎?
作爲最後的附註,return undef
不鼓勵,因爲它在列表上下文中做了錯誤的事情。你得到一個包含一個undef元素的列表,這是真的。相反,只需使用一個空白返回,它將在標量上下文中返回undef,並在列表上下文中返回一個空列表。
return unless @ret;
總之大家一樣,該代碼是更易讀,如果這樣寫的:
my @ret = someMethod();
return if $DB_ERROR;
return unless @ret;
我在標題改爲$#至$#數組。你應該認識到$#本身就是一個神奇的變量(儘管我認爲它已經在Perl 5.10中被刪除) – 2008-10-27 21:19:07
另外,我想指出你的腳本中有一個潛在的錯誤。你不應該返回(undef),而只是說退貨。在列表上下文中,您的函數將評估爲true! – 2008-10-27 21:23:20