奶头挺立呻吟高潮av全片,成人试看120秒体验区,性欧美极品v,A片高潮抽搐揉捏奶头视频

C語言

C語言函數式編程中惰性求值詳解

時間:2025-06-04 05:53:30 C語言 我要投稿
  • 相關推薦

C語言函數式編程中惰性求值詳解

  在開始介紹今天要講的知識之前,我們想要理解嚴格求值策略和非嚴格求值策略之間的區別,這樣我們才能夠深有體會的明白為什么需要利用這個技術。首先需要說明的是C#語言小部分采用了非嚴格求值策略,大部分還是嚴格求值策略。首先我們先演示非嚴格求值策略的情況,我們先在控制臺項目中寫一個DoOneThing方法。

  然后在Main方法中寫入下面這串代碼:

  然后我們運行程序,會發現DoOneThing方法并沒有執行。當然這看起來也很正常,因為這是或,并且第一個已經是true了。整個表達式就是true了,自然第二個就無需求值了。但是這恰恰就是非嚴格求值的策略,如果是嚴格求值策略的話整個表達式都會計算。接著就是嚴格求值策略的情況了,這個相信很多人都會立馬明白,首先我們需要再寫一個DoSomeThing方法:

  接著修改Main方法:

  執行之后我們可以看到如下的結果:

  但是我們可以清楚的看到a的值是false,根本不會使用b值,但是傳遞參數的時候已經將DoOneThing方法執行并賦值給b,假設這個方法是一個非常耗時的操作。那么我們就會白白浪費掉這段時間,最后求得的值也沒有使用的到。而這正是嚴格求值策略,而今天的主要目標就是改變這種情況,能夠在我們確定需要某個值的時候才計算。下面我們就可以開始改造這個方法,讓其能夠支持惰性求值。首先我們修改DoSomeThing方法:

  這里我們將參數類型都改成了函數,這樣將要傳遞進來的參數都改變成函數。只有在我們需要的時候才執行求值,否則是不會運行的,對應的Main方法中我們需要按照如下方式修改:

  這里我們并不需要把DoOneThing方法的返回類型改掉,如果這樣的話。在現有項目上使用函數式編程就會顯得太麻煩了。這里我們僅僅只需要利用匿名函數就可以辦到了,下面我們可以看最后的執行效果:

  DoOneThing方法并沒有執行,因為DoSomeThing中根本沒有確定使用這個變量,這樣我們就能夠節省下這部分計算的時間,但是事實上我們還沒有結束,實際的開發中我們可能需要多次使用這個值,比如下面我們修改DoSomeThing方法:

  并且在Main方法中調用DoSomeThing方法時將第一個參數改成true,然后執行我們就可以看到下面的輸出結果:

  DoOneThing方法被執行了兩次,當然我們可以利用局部變量保存,可能你會這么寫:

  如果這么寫,那么我們的惰性求值就沒有任何意義了,因為一進入這個方法就執行了這個方法,跟傳遞參數時直接將運算后的結果賦值給b沒有任何區別了。當然也有其他一些技巧可以避免,但是這些技巧可不是下面要講的內容,我們可以將其封裝起來,比如我們可以寫個LazyS類:

  我們可以看到在構造方法部分我們將對應的函數作為參數接收并保存到function中,只有再調用Value時候會執行該函數并將值保存,并且在下次調用時,如果已經求值過則直接返回緩存過的值,這樣就能夠避免重復的執行了,對應的我們還要修改DoSomeThing方法和Main方法:

  最終執行后我們可以看到僅執行了一次DoOneThing方法:

  一些讀者可能為問為什么類名不要Lazy而是加個S,因為.net中已經為我們包含了Lazy類,相信很多人基本上從沒有用過。只知道Func和Action的存在,下面我們修改我們的代碼直接利用自帶的:

  最終的結果之前的是一摸一樣,當然系統自帶的Lazy功能更多,并且支持多線程。

【C語言函數式編程中惰性求值詳解】相關文章:

編程函數的定義之C語言09-07

詳解C語言文件操作中fgets與fputs函數10-08

C語言指針函數和函數指針詳解09-29

C語言函數指針與回調函數詳解10-02

C語言文件操作函數freopen詳解07-13

C語言程序中什么是函數06-16

C語言程序中函數的定義11-07

C語言中getch()函數詳解(附實例)08-24

C語言編程中的聯合體union入門學習教程詳解10-15

主站蜘蛛池模板: 青河县| 若尔盖县| 朝阳市| 永宁县| 分宜县| 宁强县| 遂昌县| 茂名市| 新巴尔虎左旗| 肇源县| 阳朔县| 治多县| 天台县| 兴仁县| 伊宁县| 综艺| 乌审旗| 安远县| 武川县| 淮安市| 当涂县| 福鼎市| 汉寿县| 漯河市| 巩义市| 德安县| 应用必备| 阳高县| 太谷县| 翼城县| 视频| 邻水| 合川市| 静乐县| 腾冲县| 南丹县| 南乐县| 金川县| 大丰市| 南陵县| 东平县|