在F#中,我可以编写一个函数(fun x -> x * x)并确认它具有类型,int->int因为以下代码可以编译:
let typeCheck<'T> (x:'T) = ()
typeCheck<int->int> (fun x -> x*x)
Run Code Online (Sandbox Code Playgroud)
另一方面,GetType由于此功能与typeof<int->int>以下观点不同:
> (fun x -> x*x).GetType() = typeof<int -> int>
val it : bool = false
Run Code Online (Sandbox Code Playgroud)
如果不是GetType()和typeof,我可以调用哪些函数来模仿编译器进行的类型检查?
GetType特定lambda函数之所以与之不同,typeof<int -> int>是因为F#编译器为继承自的函数生成了一个新类int -> int。换句话说,类型不同,但是您通过所获得的类型GetType继承自int -> int。
您可以使用轻松检查IsAssignableFrom。以下是true:
typeof<int -> int>.IsAssignableFrom((fun x -> x*x).GetType())
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
82 次 |
| 最近记录: |