为了使这个问题更容易回答,让我们假设程序员头脑中模棱两可的代价要比几次额外的击键要昂贵得多。
鉴于此,我为什么不让我的队友不注释其功能参数就逃脱呢?以下面的代码为例,这可能是更复杂的代码:
let foo x y = x + y
现在,对工具提示的快速检查将向您显示F#已确定将x和y表示为整数。如果这就是您的意图,那么一切都很好。但是我不知道那不是你的意图。如果您已创建此代码以将两个字符串连接在一起怎么办?或者,如果我认为您可能打算添加双打呢?或者,如果我只是不想将鼠标悬停在每个函数参数上来确定其类型,该怎么办?
现在以这个为例:
let foo x y = "result: " + x + y
F#现在假设您可能打算连接字符串,因此x和y被定义为字符串。但是,作为维护您的代码的可怜的schmuck,我可能会看这件事,并想知道您是否打算将x和y(整数)加在一起,然后将结果附加到用于UI的字符串中。
当然,对于这样简单的示例,可以放手,但是为什么不执行显式类型注释的策略呢?
let foo (x:string) (y:string) = "result: " + x + y
模棱两可有什么危害?当然,程序员可能会为尝试做的事情选择错误的类型,但至少我知道他们的意图是,这不仅仅是疏忽。
这是一个严重的问题...我对F#还是很陌生,正在为我的公司开拓创新。我采用的标准可能会成为将来所有F#编码的基础,并且嵌入无止尽的复制粘贴中,我相信它将在未来的几年中渗透到整个文化中。
那么...关于F#的类型推断是否有什么特别之处,使其成为一项有价值的功能,仅在必要时进行注释?还是专家F#-er习惯于为非平凡的应用程序注释其参数?