дорогостоящие вычисления, происходящие как в isDefined, так и в Apply of a PartialFunction

Вполне возможно, что для того, чтобы узнать, определена ли функция в какой-то момент, необходимо выполнить значительную часть вычисления ее значения. В PartialFunction при реализации isDefined и применить оба метода должны будут это делать. Что делать, если эта обычная работа стоит дорого?

Существует возможность кэширования его результата в надежде, что apply будет вызван после isDefined. Определенно некрасиво.

Я часто хочу, чтобы PartialFunction [A, B] была Function [A, Option [B]] , которая явно изоморфна. Или, может быть, в PartialFunction может быть другой метод, скажем applyOption (a: A): Option [B] . С некоторыми миксинами у разработчиков будет выбор: реализовать isDefined и apply или applyOption. Или все они на всякий случай с точки зрения производительности. Клиентам, которые проверяют isDefined непосредственно перед вызовом apply, рекомендуется использовать вместо него applyOption .

Однако это не так. Некоторые основные методы в библиотеке, среди которых сбор в коллекциях, требуют PartialFunction . Есть ли чистый (или не очень чистый) способ избежать оплаты вычислений, повторяющихся между isDefined и apply?

Также, разумен ли метод applyOption (a: A): Option [B] ? Возможно ли добавить его в будущую версию? Стоит ли?

8
задан Didier Dupont 18 August 2011 в 20:18
поделиться