假設你想創建一個具有最終副作用(引發錯誤,退出程序,飛向月球)的函數,那麼遵循的正確模式是什麼?我現在做的是這樣的:當您不關心返回值時,創建適應性泛型返回類型的首選方法是什麼?
let fastExit x =
match box x with
| null ->
System.Environment.FailFast("Something went terribly wrong, get out fast!")
Unchecked.defaultof<_> // adaptable generic return
| _ -> x
我按照上面的圖案很經常(尤指與CLR的BCL互動。),但從來沒有真正想知道它是否是做事的F#方式。顯然,這隻適用於你永遠不會返回的情況,或者如果你不必在追求代碼時關心危險的返回值。
請注意,作爲(現已刪除的)註釋建議,這在合成和連鎖性方面也是有意義的(即,組成>>
和管道|>
操作員)。
我可能只是把failwith讓編譯器開心 –
@JohnPalmer,你的意思是在需要執行任何代碼之後(即在這個例子中的'FailFast'之後)放置'failwith'。這在某些你不想退出的情況下不起作用(儘管承認這是危險的代碼)。 – Abel
這可能是我會做的 –