Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/blackberry/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
f#用于解析错误类型的惯用类型解析解决方案_F#_Inline_Type Resolution - Fatal编程技术网

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。因此

我刚刚开始学习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
。因此,如果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有一整篇关于这个主题的文章: