f#用于解析错误类型的惯用类型解析解决方案
我刚刚开始学习F#,但我有一些类似于以下的代码:f#用于解析错误类型的惯用类型解析解决方案,f#,inline,type-resolution,F#,Inline,Type Resolution,我刚刚开始学习F#,但我有一些类似于以下的代码: let square x = x*x let result = square 5.1 let result' = square 12 不幸的是,这会导致以下错误:此表达式应具有类型float,但此处具有类型int 这个问题有没有一个惯用的F#解决方案,或者我的思维被我的C#经验污染了?就这样写吧: let inline square x = x * x 否则,在您第一次使用square函数后,它的类型被推断为float->float。因此
let square x = x*x
let result = square 5.1
let result' = square 12
不幸的是,这会导致以下错误:此表达式应具有类型float,但此处具有类型int
这个问题有没有一个惯用的F#解决方案,或者我的思维被我的C#经验污染了?就这样写吧:
let inline square x = x * x
否则,在您第一次使用square
函数后,它的类型被推断为float->float
。因此,如果F#没有从int
自动转换为float
,则会收到一个错误
因此,如果您不想使用inline
,最简单的解决方案是编写
let result' = square (float 12)
它简单易读
有关更高级的解决方案,请查看以下内容:
但这些解决方案(imho)令人费解
let inline square x = x * x
let result = square 5.1
let result' = square 12
printfn "%f" result
printfn "%d" result'
Tomas Petricek有一整篇关于这个主题的文章: