第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機(jī)立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

什么時候應(yīng)該使用&調(diào)用Perl子例程?

什么時候應(yīng)該使用&調(diào)用Perl子例程?

我聽說人們不應(yīng)該&習(xí)慣于調(diào)用Perl潛艇,即:function($a,$b,...);# opposed to&function($a,$b,...);我知道其中一個參數(shù)列表是可選的,但是在什么情況下適合使用&和哪些情況下您絕對不應(yīng)該使用它呢?另外,省略時如何提高性能&呢?
查看完整描述

3 回答

?
倚天杖

TA貢獻(xiàn)1828條經(jīng)驗 獲得超3個贊

IMO,唯一有理由使用的時間&是,如果您正在獲取或調(diào)用代碼引用,例如:


sub foo() {

    print "hi\n";

}


my $x = \&foo;

&$x();

主要的時間,你可以,你使用它絕對不應(yīng)該在大多數(shù)情況下,調(diào)用一個已具雛形,指定任何非默認(rèn)調(diào)用行為子時。我的意思是,某些原型允許重新解釋參數(shù)列表,例如將引用轉(zhuǎn)換@array和指定%hash為引用。因此,潛艇將期望發(fā)生這些重新解釋,并且除非您進(jìn)行任何必要的長度以手工模擬它們,否則潛艇將獲得與預(yù)期的輸入完全不同的輸入。


我認(rèn)為主要是人們試圖告訴您您仍在以Perl 4風(fēng)格進(jìn)行編寫,而我們現(xiàn)在有了一個更干凈,更好的東西,稱為Perl 5。


關(guān)于性能,Perl有多種方法可以優(yōu)化&失敗的子調(diào)用,其中一種主要方法是常量的內(nèi)聯(lián)。


在某些情況下,使用&可以帶來性能上的好處:如果您要轉(zhuǎn)發(fā)帶有的子呼叫foo(@_)。使用&foo比無限快foo(@_)。除非您通過分析明確確定需要微優(yōu)化,否則我不建議您這樣做。


查看完整回答
反對 回復(fù) 2019-10-28
?
鴻蒙傳說

TA貢獻(xiàn)1865條經(jīng)驗 獲得超7個贊

我經(jīng)常濫用&,但是主要是因為我在做怪異的界面設(shè)計。如果您不需要這些情況之一,請不要使用&。其中大多數(shù)只是訪問子例程定義,而不是調(diào)用子例程。全部都在perlsub中。


引用命名子例程。對于大多數(shù)Perlers來說,這可能是唯一的常見情況:


 my $sub = \&foo;

類似地,分配給typeglob,這使您可以使用不同的名稱調(diào)用子例程:


 *bar = \&foo;

如在測試套件中一樣,檢查是否定義了子例程:


 if( defined &foo ) { ... }

刪除不常見的子例程定義:


 undef &foo;

提供一個調(diào)度程序子例程,其唯一的工作就是選擇正確的子例程來調(diào)用。這是我&用來調(diào)用子例程的唯一情況,并且當(dāng)我希望多次調(diào)用分派器并且需要從操作中擠出一點性能時:


 sub figure_it_out_for_me {

    # all of these re-use the current @_

      if( ...some condition... ) { &foo     } 

   elsif( ...some other...     ) { &bar     }

   else                          { &default }

   }

要使用當(dāng)前參數(shù)堆棧跳入另一個子例程(并替換調(diào)用堆棧中的當(dāng)前子例程),則在分配過程中會執(zhí)行一個稀疏操作,尤其是在AUTOLOAD:


 goto ⊂

調(diào)用以Perl內(nèi)置函數(shù)命名的子例程。將&始終為您提供了用戶定義的。這就是為什么我們在Learning Perl中教它。您實際上并不是真的想正常執(zhí)行此操作,但這是的功能之一&。


在某些地方可以使用它們,但是有更好的方法:


調(diào)用與Perl內(nèi)置名稱相同的子例程。只是沒有與Perl內(nèi)置名稱相同的子例程。檢查perlfunc以查看不應(yīng)該使用的內(nèi)置名稱列表。


禁用原型。如果您不知道這意味著什么或為什么想要它,請不要使用&。一些黑魔法代碼可能需要它,但是在這種情況下,您可能知道自己在做什么。


取消引用并執(zhí)行子例程引用。只需使用->符號即可。


查看完整回答
反對 回復(fù) 2019-10-28
  • 3 回答
  • 0 關(guān)注
  • 534 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號