在Visual Studio 2008中,有没有一种方法可以折叠F#中的值/函数定义?

4
有没有一种像在C#等语言中对对象进行的那样"折叠"VS2008中函数和值的方法?浏览数百行嵌套的函数定义非常耗时且令人沮丧。

如果需要这样的功能,有人可能会认为代码需要分解成更小的文件和模块。 - driis
2
@driis,一般来说我同意你的看法,但在F#中,定义中嵌套let实际上有很多好处。它允许本质上是私有嵌套方法。在几种情况下,这里会很方便地进行大纲。 - JaredPar
3个回答

9

因此,官方答复是不支持此功能。然而,在我与F#团队实习期间,我编写了一个原型实现该功能的版本。由于F#团队有其他更重要的事情要做,因此这个版本从未经过适当测试,并且没有包含在最终版本中。

该功能的代码实际上仍然存在于F#中,并且可以通过将以下内容添加到devenv.exe.config文件中来启用该功能:

<appSettings>
    <add key="fsharp-regions-enabled" value="true" />
</appSettings>

显然,这不完全是你想要的,因为你只能折叠模块和类型定义,但它仍然可能有用 - 在F#中决定要折叠哪些内容很困难,因为F#有很多嵌套声明...

顺便说一下:我是否提到过这未经过测试,可能会导致Visual Studio崩溃或甚至折叠宇宙?


1

在Visual Studio 2008中,没有这个功能,因为语言服务不支持大纲视图。在Visual Studio 2010中也没有此功能。但是,编辑器支持自定义大纲的概念。

  • 在编辑器中选择一个区域
  • 右键单击,进入大纲->隐藏选择

不幸的是,这是完全手动的过程。


3
在VS2010上,有人在这里编写了一个简单的大纲扩展程序(http://visualstudiogallery.msdn.microsoft.com/en-us/bec977b8-c9d9-4926-999e-e50c4498df8a)。它完全基于缩进而不是语言语法,但由于F#主要是缩进敏感(具有轻量级语法),因此它运行得非常好。我对它没有任何主要抱怨。 - Mark H

0

我带来了适用于我自己的东西,也许会引起你的兴趣。我使用 VS2008+RockScroll在我的电脑上可行)。

当我需要处理大量嵌套函数时,它真的很有帮助,因为我能更清晰地看到整个情况。此外,我在函数主体开头添加注释,例如:

// Start of bigFunctionWithLoadsOfNestedFunctions

当双击它时,它会在缩略图视图中以红色突出显示let-bound定义和函数的真实起始点。请参见: http://img338.imageshack.us/img338/1060/40105807.png


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接