劇多
首頁
資訊
體育
娛樂
汽車
投資
財經
軍事
科技
數碼
科學
遊戲
歷史
健康
政治
影視
旅遊
育兒
美食
時尚
房產
農業
社會
文化
教育
技術
美文
情感
故事
家居
職場
自然
闢謠
心理
攝影
漫畫
生活
其它
Club
Tips
熱門話題
搜尋
註冊
登入
首頁
>
Club
>
2021-02-12 16:44
result是什麼意思啊?
7
回覆列表
1 # 使用者3964003095292
區別就是你的無論是Ok還是Err,它們都是同一個型別Result。這樣有什麼用呢?這樣你就可以把一些呼叫串起來了,而不用每個都去 if err != nil。比如
因為他們都是同一個型別Result,所以你可以對Ok和Err應用同樣的操作,而不一定必須要使用match來把資料取出來然後再分別處理。在上面的result它還是一個Result,中間三個函式func1、func2、func3呼叫只要任何一個返回了Err,那麼這個Err就是最終的返回值(and_then函式的作用),沒有出錯的話,那麼結果就是最後一個閉包函式的結果,這裡面是func3的結果。這些函式並沒有為哪個業務程式碼定製過,具有普適性,因為它們他們都是Result,透過and_then從一個Result轉變成另一個Result而已。而Go的err就不行了。實際上這三個if err == nil都是同樣的操作,但你卻怎麼都要寫這麼三個蛋疼的東西。Result這個東西是個ADT (Algebraic Data Type),是函數語言程式設計界已經普及了的東西。可以去看看OCaml, Haskell這些語言裡面ADT的相關應用來感受一下它所帶來的便捷性。Rust裡面的enum就是一個ADT,比較少用FP的同學可能會經常覺得需要用match去把資料取出來 好麻煩,其實ADT大多數時候都不是這麼用的。很多時候都只需要在呼叫鏈的最後最後才去把結果取出來,中間的結果可以用各種抽象的函式去封裝一些基本的操作來轉換。比如標準庫自帶的Result和Option,初學Rust的同學就是喜歡呼叫unwrap()提前把它的結果取出來,這並沒有什麼必要。
發表回復
相關內容
result函式?
result和consequence,outcome的區別?
as a result與as a result of用法.後接什麼?意義?
C語言,計算排列數Amn。急,不要Result之類的?
急求英語關於result的短語?
result from後面可以跟句子嗎?
result和consequence有什麼區別?
∧
中秋節和大豐收的關聯?
∨
生物工程專業去哪個國家留學?
熱門排行
星途瑤光兩驅優享版後視鏡電加熱怎麼用?
華為mate60pro超級微距能看到蟎蟲嗎?
原神如何快速拿到凱亞皮膚?
carxstreet亞洲為什麼進不去?
用珍珠粉和牛奶做面膜?
拼好飯沒人拼會怎麼樣?
中醫臨床全科醫學學什麼?
溫控面板不亮?
剪輯中如何讓多張照片切換絲滑?
繁殖小太陽鸚鵡需要什麼手續?
區別就是你的無論是Ok還是Err,它們都是同一個型別Result。這樣有什麼用呢?這樣你就可以把一些呼叫串起來了,而不用每個都去 if err != nil。比如
因為他們都是同一個型別Result,所以你可以對Ok和Err應用同樣的操作,而不一定必須要使用match來把資料取出來然後再分別處理。在上面的result它還是一個Result,中間三個函式func1、func2、func3呼叫只要任何一個返回了Err,那麼這個Err就是最終的返回值(and_then函式的作用),沒有出錯的話,那麼結果就是最後一個閉包函式的結果,這裡面是func3的結果。這些函式並沒有為哪個業務程式碼定製過,具有普適性,因為它們他們都是Result,透過and_then從一個Result轉變成另一個Result而已。而Go的err就不行了。實際上這三個if err == nil都是同樣的操作,但你卻怎麼都要寫這麼三個蛋疼的東西。Result這個東西是個ADT (Algebraic Data Type),是函數語言程式設計界已經普及了的東西。可以去看看OCaml, Haskell這些語言裡面ADT的相關應用來感受一下它所帶來的便捷性。Rust裡面的enum就是一個ADT,比較少用FP的同學可能會經常覺得需要用match去把資料取出來 好麻煩,其實ADT大多數時候都不是這麼用的。很多時候都只需要在呼叫鏈的最後最後才去把結果取出來,中間的結果可以用各種抽象的函式去封裝一些基本的操作來轉換。比如標準庫自帶的Result和Option,初學Rust的同學就是喜歡呼叫unwrap()提前把它的結果取出來,這並沒有什麼必要。