Я искал StackOverflow (и другие источники) для этого ответа, но не могу найти ничего.F # Методы расширения в списках, IEnumberable и т. Д.
В C#, если бы я имел определение виджета, скажу:
class widget
{
public string PrettyName() { ... do stuff here }
}
, и я хотел, чтобы обеспечить легкую печать списка виджетов, я мог бы сделать это:
namespace ExtensionMethods
{
public static PrintAll(this IEnumerable<Widget> widgets, TextWriter writer)
{
foreach(var w in widgets) { writer.WriteLine(w.PrettyName()) }
}
}
Как я бы выполнил нечто подобное с типом записи и коллекцией (List или Seq предпочтительнее в F #). Мне бы хотелось иметь список Widgest и иметь возможность вызвать функцию прямо в коллекции, которая сделала что-то вроде этого. Предположим (поскольку это F #), что функция не будет изменять состояние коллекции, к которой она привязана, но возвращает некоторое новое значение.
Как определить функцию printAll как члена в типе записи виджетов для использования в приведенном выше сценарии? – fbl
@ flevine100 - Обычно вы не определяете printAll как член в типе, а как функцию с ограничением в модуле. Я отредактировал свой ответ, чтобы включить пример. – kvb
спасибо! - Функциональное программирование - это, безусловно, другой подход к организации кода. – fbl