2015-10-14 64 views
4

我得到了下面的代碼:

sub deg2rad ($;$) { my $d = _DR * $_[0]; $_[1] ? $d : rad2rad($d) }

誰能告訴我什麼$;$手段?

回答

10

子聲明後面括號中的內容稱爲原型。他們在perlsub解釋。一般來說,你可以用可以來限制編譯時參數檢查。

特定的($;$)用於強制參數。

分號(;)將可選參數與可選參數分隔開。它之前@或%,這吞噬一切

所以在這裏,子必須與至少有一個參數被調用,但可能有第二個是多餘的。

如果您使用三個參數調用它,它將引發錯誤。

use constant _DR => 1; 
sub rad2rad  {@_} 
sub deg2rad ($;$) { my $d = _DR * $_[0]; $_[1] ? $d : rad2rad($d) } 

print deg2rad(2, 3, 4); 

__END__ 

Too many arguments for main::deg2rad at scratch.pl line 409, near "4)" 
Execution of scratch.pl aborted due to compilation errors. 

注意原型不與工作方法調用像$foo->frobnicate()

一般而言,原型在現代Perl中被認爲是不好的做法,應該只在您確切知道自己在做什麼時使用。

簡短而中肯的方式The Sidhekin使用in their comment below概括起來很好:

他們認爲不好的做法,最重要的原因,就是 人們不知道他們是誰,做什麼,正試圖使用​​ 他們的東西,他們不是。

請參閱this question及其答案,以獲得有關該主題的詳細解釋和討論。

+4

他們被認爲是不好的練習的部分原因是「prototype」這個詞。在其他編程語言中,它意味着別的東西。 – Sobrique

+0

這很有幫助。非常感謝! –

+1

他們被認爲是不好的做法最重要的原因是那些不知道自己在做什麼的人正試圖將他們用於某些他們不知道的事情。 (他們是電動工具;請閱讀手冊,除非你是這個意思,否則不要使用它們。) –

相關問題