代码之家  ›  专栏  ›  技术社区  ›  Roger Johansson

调试F#代码和功能风格

  •  20
  • Roger Johansson  · 技术社区  · 14 年前

    我认为应该避免将函数调用的结果存储在temp变量中,然后返回该变量

    例如

    let someFunc foo =
        let result = match foo with
                     | x -> ...
                     | y -> ...
        result 
    

    而不是像这样做(我可能是太远了?):

    let someFunc foo =
        match foo with
        | x -> ...
        | y -> ...
    

    从功能性的角度来看,它工作得很好,但是它使调试变得更加困难。 如果->做一些古怪的事。

    那么我应该如何处理这种情况呢?

    4 回复  |  直到 14 年前
        1
  •  11
  •   leppie    14 年前

    任何一种方法都是可以接受的,因为您只是绑定到本地不可变变量。

    不过有一个陷阱。如果使用它作为使用尾部调用的递归循环的一部分,那么使用temp变量的循环将消除尾部调用,因此堆栈空间将增加。

        2
  •  25
  •   Scott Shingler Oldrich Svec    8 年前

    要检查管道的中部,我建议采用以下解决方法:

    把这个代码放在某个地方:

    [<AutoOpen>]
    module AutoOpenModule
    
    #if DEBUG
    let (|>) value func =
      let result = func value
      result
    #endif
    

    https://msdn.microsoft.com/en-us/library/cc667388(v=vs.100).aspx

    现在您应该能够进入管道操作符。

        3
  •  7
  •   Community Egal    7 年前

    未来的调试器还有很多改进的方法。。。

    另请参见

    Do some Functional programming constructs reduce Debuggability?

        4
  •  4
  •   Jim Burger    14 年前

    如果你用临时工,我不会开枪,但我也不会因为我需要看一些正在调试的东西而限制我的风格。

    有关Visual Studio调试器中最新功能的列表: http://msdn.microsoft.com/en-us/library/01xdt7cs.aspx