代码之家  ›  专栏  ›  技术社区  ›  William Jockusch

F#在接口成员实现中使用组合符号

  •  1
  • William Jockusch  · 技术社区  · 6 年前

    我有以下界面:

    type IFactory<'TIn, 'TOut> =
      abstract Create: 'TIn -> 'TOut
    

    我正试图写一个复合工厂。以下语法似乎是正确的,因为VS没有对此抱怨:

    type ComposedFactory<'TIn, 'TMid, 'TOut>
      (midFactory: IFactory<'TIn, 'TMid>,
       outFactory: IFactory<'TMid, 'TOut>) =
    
        let Create' =
            midFactory.Create >> outFactory.Create
    
        interface IFactory<'TIn, 'TOut> with
            member __.Create x = Create' x
    

    2 回复  |  直到 6 年前
        1
  •  3
  •   scrwtp    6 年前

    你可以在运动中这样做:

    type ComposedFactory<'TIn, 'TMid, 'TOut>
       (midFactory: IFactory<'TIn, 'TMid>,
        outFactory: IFactory<'TMid, 'TOut>) =
    
    interface IFactory<'TIn, 'TOut> with
        member __.Create x = (midFactory.Create >> outFactory.Create) x
    

    但我不能说这比你以前的好。

        2
  •  2
  •   Ciaran_McCarthy    6 年前

    我可以向您推荐的最佳选择是管道:

    member __.Create x = x |> midFactory.Create |> outFactory.Create