F# 强制执行显式类型参数
我有一个泛型函数,它很容易让编译器推断出错误的类型参数。类型参数只控制返回类型,如果我不小心错过了一个类型注释,编译器会推断出F# 强制执行显式类型参数,f#,inline,F#,Inline,我有一个泛型函数,它很容易让编译器推断出错误的类型参数。类型参数只控制返回类型,如果我不小心错过了一个类型注释,编译器会推断出obj 如果调用函数而不给它显式的类型参数,我怎么能使它成为编译时错误呢?未选中。defaultof函数的工作方式如下: > Unchecked.defaultof;; Unchecked.defaultof;; ^^^^^^^^^^^^^^^^^^^ stdin(1,1): error FS0685: The generic function 'def
obj
如果调用函数而不给它显式的类型参数,我怎么能使它成为编译时错误呢?未选中。defaultof
函数的工作方式如下:
> Unchecked.defaultof;;
Unchecked.defaultof;;
^^^^^^^^^^^^^^^^^^^
stdin(1,1): error FS0685: The generic function 'defaultof' must be given explicit type argument(s)
应该有帮助函数的
defaultof
使用特殊属性。F#源代码再一次很有用。函数的实现在prim types.fs
中,但该属性添加在接口文件prim types.fsi
中。合并声明将是:
[<RequiresExplicitTypeArguments>]
let inline unsafeDefault<'T> : 'T = (# "ilzero !0" type ('T) : 'T #)
[]
多亏了Tomas,让我们内联取消签名吧-我是在看prim-types.fs中的实现,而不是在看prim-types.fsi中的签名。@Tim-我也是在看fs
文件。我花了一些时间才弄明白它实际上可以在fsi
文件中:-)