2012-05-18 3 views
10

F #에서 ServiceStack webservice를 작성 중이며 일부 기능 (예 : SOAP 지원 제거)을 제한해야합니다.F #의 속성에 여러 enum 값을 할당하는 구문은 무엇입니까?

C#에서 나는 그렇게 같이 EnableFeatures 속성에 여러 열거 형 (ServiceStack.ServiceHost.Feature)을 할당하는 파이프 작업을 사용하고 있습니다 :

SetConfig(new EndpointHostConfig 
{ 
    DebugMode = true, //Show StackTraces in responses in development 
    EnableFeatures = Feature.Json | Feature.Xml | Feature.Html | Feature.Metadata | Feature.Jsv 
}); 

그러나 F #으로 당신이 이것을 달성하기 위해 파이프를 사용할 수 없습니다, 내가 시도한 다른 모든 것들은 열거 형에 함수 응용을 시도하고있다. 이 경우 여러 enum을 할당하려면 어떻게해야합니까?

+3

당신은 이미 답변을 얻었지만 파이프 운영자가 아닙니다. twise 또는 '. F #의 비트 또는 연산자는 Craig Stuntz가 지적했듯이'|||'입니다. –

+2

나는 그것이'|||||||라고 생각한다. .. 잠깐, 아니, 단지'|||'. – Daniel

+1

@ botanist 여기에서 만나서 반가워요. 정말 멋진 F # 사람들이 있습니다. 그리고 저도 있습니다. –

답변

18

은 3 중관을 사용을 reduce :

List.reduce (|||) [Feature.Json; Feature.Xml; Feature.Html; Feature.Metadata] 
+0

고맙습니다! 나는 내가 간단한 것을 놓친다는 것을 알았고, 실제로 나는 그러했다. [F # 비트 단위 연산자] (http://msdn.microsoft.com/en-us/library/dd469495.aspx) –

1

당신을주는 기본 값의 건설에 따라 값을 만들 : 당신은 그들의 무리가있는 경우 당신은 몇 번의 키 입력을 절약 할 수 있습니다

EnableFeatures = Feature.Json ||| Feature.Xml ||| Feature.Html ||| Feature.Metadata ||| Feature.Jsv 
+6

당신은 할 수 있습니다. 그렇기 때문에 플래그와 비트 연산자를 상징적으로 사용하는 이름이 있습니다. 그래서 우리는 꼭 그렇게 할 필요가 없습니다. –

12

:

EnabledFeatures = enum<Feature>(16); // or whatever the full flag value would be for Json + Xml + Html + Metadata, etc 
관련 문제