我有一个通用函数,很容易让编译器推断出错误的类型参数.类型参数仅控制返回类型,如果我不小心错过了类型注释,编译器会推断obj.
如何在不给它显式类型参数的情况下调用我的函数使编译时错误?该Unchecked.defaultof功能按我喜欢的方式工作:
> Unchecked.defaultof;;
Unchecked.defaultof;;
^^^^^^^^^^^^^^^^^^^
stdin(1,1): error FS0685: The generic function 'defaultof' must be given explicit type argument(s)
Run Code Online (Sandbox Code Playgroud)
Tom*_*cek 10
该defaultof函数使用特殊属性.F#源代码再次有用.该函数的实现在prim-types.fs,但该属性被添加到接口文件中prim-types.fsi.合并声明将是:
[<RequiresExplicitTypeArguments>]
let inline unsafeDefault<'T> : 'T = (# "ilzero !0" type ('T) : 'T #)
Run Code Online (Sandbox Code Playgroud)
内联IL (# ... #)仅限于F#核心,但声明是任何人都可以使用的.
您可以在F#规范的第16节(第217页)中找到该属性:
应用于F#函数或方法时,表示在使用时必须为函数或方法指定显式类型参数.例如,
typeof<int>.此属性应仅在F#程序集中使用.
| 归档时间: |
|
| 查看次数: |
970 次 |
| 最近记录: |