在研究与编程相关的主题时,我在lambdabot中遇到了一个用于Haskell的无尖重构工具,并且想知道是否可以将F#重构成一个无点样式?
我不是提倡使用无点样式,而是把它看作是更好地理解函数的一种手段。
注意:焊盘回答了这个问题的早期版本,但是我重新定义了这个问题,因为这个答案对其他学习和使用F#的人来说是有价值的,我不希望因为一些密切的投票而删除这个问题。
注意:仅仅是因为我改变了问题,不要认为答案意味着不能使用F#以无点的方式进行编码。这在很多情况下是可以做到的,但你必须遵守一些限制。
发布于 2014-07-22 15:50:56
短答案
不是的。
长答案
F#中有一些东西使得这样的工具变得不切实际。(1)由于.NET互操作,F#代码经常会产生副作用,当出现副作用时,自动代码转换就变得非常困难。Haskell的情况并非如此;在Haskell中,等式推理要容易得多,您可以在不改变其评估结果的情况下,用右手边重写左手边。(2) F#中的无点编程受价值约束的限制。我不确定您是否能够在不触及此问题的情况下积极地进行代码转换。
我认为,假设F#代码是纯的,在特定情况下不存在值限制,这样我们就可以给用户一些提示,这样就更实用了。用户在评估建议实际上是正确的之后,可以谨慎地应用建议。它更接近于HLint方法,而不是您所提到的方法。FSharpLint在这个方向上增加了一些衬里规则。
https://stackoverflow.com/questions/24890026
复制相似问题