是否有任何快速的方式作爲PartialFunction[A, B]
作爲具體功能(類型,如(A) => B
)?最簡潔的語法,我知道的是:斯卡拉部分功能從具體的
(a: A) => a match { case obj => func(obj) }
是否有隱式轉換的任何地方,像:
implicit def funcAsPartial[A, B](func: A => B) = new PartialFunction[A, B] {
def isDefinedAt(a: A) = true
def apply(a: A) = func(a)
}
我想我只是寫了什麼,我一直在尋找,但是這是否已經存在斯卡拉圖書館?
謝謝;我有一個誤解,即Function1暗示在整個域中定義。 –
@AaronNovstrup:您對PartialFunction合同的解釋是唯一合理的解釋,但不會被ScalaDocs反映(至少在2.9.1之前)。 'PartialFunction'的ScalaDocs聲明:「PartialFunction [A,B]'類型的部分函數是一個一元函數,其中域不一定包含所有'A'類型的值。此外,他們從來沒有聲稱在任何定義的地方調用f是安全的(從某種意義上說),這很容易違反,正如'PartialFunction'文字'{case 0 => 1/0}'所做的那樣。 你從哪裏得到這些信息?是否需要提交錯誤報告? – Blaisorblade
@Blaisorblade我相信當我在學習Scala時(這已經有一段時間了),我在郵件列表上看到了這個解釋,當我寫這個答案時我沒有看任何文檔。而且,是的,違反此合約很容易,甚至有點常見(例如,在catch塊中包裝/重新拋出異常)。真正的一點是,PartialFunctions定義了它們的域,而普通函數卻沒有(關於實際意義上的某些模糊性)。 –