是否有在F#中进行隐式转换的技巧?

考虑这个F#代码来汇总我下面的数字是3和5的倍数:

let isMultipleOfThreeOrFive n = 
    (n % 3 = 0) || (n % 5 = 0)

let sequenceOfMultiples i =
    seq {1 .. i - 1} |> Seq.filter isMultipleOfThreeOrFive

由于我是一个int,如果我很大,你会溢出.这个版本与BigInteger负责:

let isMultipleOfThreeOrFive n = 
    (n % 3I = 0I) || (n % 5I = 0I)

let sequenceOfMultiples (i : System.Numerics.BigInteger) =
    seq {1I .. i - 1I} |> Seq.filter isMultipleOfThreeOrFive

要将int版本转换为BigInteger版本,我必须在数字之后添加大量的Is.这是因为F#不进行隐式转换.

有没有一种简单的方法来解决这个问题,或者在6个地方添加Is是最好的事情?

你做了最好的事情.

(没有比通过添加你添加的六个字符更容易“绕过”它.即使没有隐式转换,F#也比C#短,而且从int到BigInteger的delta变化也更小在F#而不是C#.所以不要为隐含转换的丢失感到难过 – 对所有其他简洁的胜利感到高兴.:))

https://stackoverflow.com/questions/4075160/are-there-tricks-for-doing-implicit-conversions-in-f

本站文章除注明转载外,均为本站原创或编译
转载请明显位置注明出处:是否有在F#中进行隐式转换的技巧?