cme*_*ren 2 f# casting literals
在F#中,如果你写,3 + 2.5你会得到一个语法错误.您必须编写例如3. + 2.5使其工作,这可能会在具有许多数字文字的数学重域中变得烦人.
看到许多其他语言(例如C#)处理这个问题就好了,有什么特别的原因导致F#在执行算术运算时没有隐式地将int文字转换为float(这是我所知道的无损转换)?
这是真的,int到float是"安全".然而,正如其他人所提到的,一般认为类型之间缺乏隐式转换被许多人认为是F#的一个很好的特征.
F#比C#具有更广泛的类型推断.使用推断的类型可以通过大型代码库传递.数值类型之间的隐式转换可能会使推理变得复杂,这会使得更难理解类型错误并增加编译器代码本身的维护负担.实际上,F#不执行C#中定义的任何隐式转换.
通过消除不必要的强制转换,隐式转换可以提高源代码的可读性.但是,由于隐式转换不需要程序员从一种类型明确地转换为另一种类型,因此必须注意防止意外结果.
同样,这会降低便利性,但会降低不正确行为的可能性,这可能会在以后或其他人身上造成更大的不便.
基本上,这种方法为了另一种便利(不必在任何地方写入类型名称)以及一些增加的安全性/显性性而进行了一些便利.我个人认为这是F#的一个很好的权衡.
| 归档时间: |
|
| 查看次数: |
209 次 |
| 最近记录: |