在SML

2012-10-20 43 views
0

異常IO籌集IO異常具有結構:在SML

Exception IO of { 
name: string 
.... 
...} 

一些其他的參數,我不明白。

我必須分配所有這些。我的意思是在此之後我該做什麼?

exception IO of {inputfile} 

我通常定義異常,然後引發。但我甚至沒有用這種方式定義例外。

我想要做的就是引發異常,如果輸入文件不存在。我在這裏做什麼?

謝謝

回答

1

是的,你必須創建一個類型木衛一的異常時提供所有三個字段。該字段的含義在the documentation解釋:

這是提出的主要異常,當在I/O子系統將發生錯誤。 Io的組件爲:

  • name:讀寫器的名稱組件。
  • 函數:引發異常的函數的名稱。
  • 原因:讀取器或寫入器引發的底層異常,或在流I/O級別檢測到的異常。

一些標準的原因是:如果

  • OS.SysErr一個實際的系統調用已完成和失敗。 *下標如果給出了格式不正確的參數。
  • BlockingNotSupported
  • NonblockingNotSupported
  • ClosedStream

Io的原因領域不限於這些特定的異常。創建自己的讀者或作者的用戶可能會引發他們喜歡的任何異常,這些異常將被報告爲生成的Io異常的原因字段。

注意openIn已經引發Io異常,如果該文件不存在(與"openIn"作爲函數,文件名作爲名稱和SysErr的原因),所以沒有必要爲你提高你自己。

+0

假設我必須定義自己的異常。 我在哪裏提出異常? 我在開始時定義異常,然後在發生錯誤時將其提升。 我該如何處理?例如 TextIO.openIn(「something」)是我無法像我自己的函數中那樣定義條件的函數。我在哪裏提出例外? – 700resu

+0

@ user1710036不確定你的意思,你在發生錯誤時引發異常。 – sepp2k

+0

我的意思是 在正常情況下,我所做的是: 如果一個then然後提出異常 或案件......的一個=> .... | b => .... | _ =>引發異常。 對於TextIO.openIn(...) 的情況,我沒有用於定義個案的選項。那麼,我在哪裏定義例外 – 700resu