2009-02-10 5 views
12

파이프 생성자를 파이프 작성자로 사용하는 올바른 구문을 찾으려고합니다. 현재 정적 멤버를 사용하여 개체를 만들고 그 개체로 파이핑합니다. 다음은 단순화 된 버전입니다. 내가 원하는 무엇F # 파이프 기호를 개체 생성자와 함께 사용

type Shape = 
    val points : Vector[] 

    new (points) = 
     { points = points; } 

    static member create(points) = 
     Shape(points) 

    static member concat(shapes : Shape list) = 
     shapes 
      |> List.map (fun shape -> shape.points) 
      |> Array.concat 
      |> Shape.create 

...

static member concat(shapes : Shape list) = 
     shapes 
      |> List.map (fun shape -> shape.points) 
      |> Array.concat 
      |> (new Shape) 

이 가능한 같은가요? 정적 멤버 생성을 사용하여 생성자를 반복하여 코드를 복제하고 싶지 않습니다.

업데이트 생성자 정확한 구문은 F F # 4.0 # 4.0

현재 일류 함수이다.

static member concat(shapes : Shape list) = 
     shapes 
      |> List.map (fun shape -> shape.points) 
      |> Array.concat 
      |> Shape 

답변

15

은 객체 생성자 작성 가능하지 않습니다, 분명히 항상

(fun args -> new Shape(args)) 
+0

어, 아주 간단합니다. 나는 많은 다른 문법을 시도하고 재미를 사용하는 것을 생각조차하지 않았다. 고마워요. – gradbot

3

있다. 차별 노조 생성자이 문제가하지 않는 것 : 당신은 파이프 라인을 사용하려면, 브라이언의 대답은 아마 최고

> 1 + 1 |> Some;; 
val it : int option = Some 2 

. 이 경우에는 Shape()로 전체 표현식을 래핑하는 것을 고려할 것입니다.

+0

설명해 주셔서 감사합니다. 나는 단지 일정한 것을 위해서 브라이언의 길을 고수 할 것입니다. 필자는 인식하기 쉬운 유형으로 끝내기 기능을 좋아합니다. 어쩌면 그들은 미래에 이것을위한 지원을 추가 할 것입니다. – gradbot