Каков синтаксис для назначения нескольких значений перечисления свойству в F#?
Я пишу веб-сервис ServiceStack на F# и мне нужно ограничить некоторые функции (например, удалить поддержку SOAP).
В C# я использую конвейерную операцию для назначения нескольких Enums (ServiceStack.ServiceHost.Feature) свойству EnableFeatures, например так:
SetConfig(new EndpointHostConfig
{
DebugMode = true, //Show StackTraces in responses in development
EnableFeatures = Feature.Json | Feature.Xml | Feature.Html | Feature.Metadata | Feature.Jsv
});
Однако в F# вы не можете использовать pipe для достижения этой цели, и все остальное, что я пытаюсь сделать, - это попытаться применить функцию к перечислениям. Как мне в этом случае назначить несколько перечислений?
3 ответа
Решение
Используйте тройную трубу:
EnableFeatures = Feature.Json ||| Feature.Xml ||| Feature.Html ||| Feature.Metadata ||| Feature.Jsv
Если у вас есть несколько из них, вы можете сохранить несколько нажатий клавиш с reduce
:
List.reduce (|||) [Feature.Json; Feature.Xml; Feature.Html; Feature.Metadata]
Вы должны создать значение на основе конструкции базовых значений:
EnabledFeatures = enum<Feature>(16); // or whatever the full flag value would be for Json + Xml + Html + Metadata, etc