6.6.1 F# 中函数调用的类型判断

尽管,在 F# 中能够用尖括号指定类型參数值。与 C# 中的方式同样。但这样的方法非常少使用。

原因是,当编译器无法判断出全部的信息,须要程序猿的帮助时。我们仅在真正须要的地方,加入类型批注。

我们用一个演示样例来演示:

> Option.map (fun dt -> dt.Year)(Some(DateTime.Now));;

error FS0072: Lookup on object ofindeterminate type.

> Option.map (fun (dt:DateTime) ->dt.Year) (Some(DateTime.Now));;

val it : int option = Some(2008)

与 C# 不一样,F# 中參数值的顺序非常重要。因此。第一种情况会失败。

这是由于F# 编译器要遇到第二个參数值时,才知道 dt 值是 DateTime 类型,所以,在处理第一个參数值时,它不知道 Year 属性是否存在。在另外一种情况中。我们纠正了这个问题,加入了类型批注,显式指定 dt 值的类型。假设我们使用管道来写前面的代码段。就不须要类型批注。这是使用管道运算符重要的原因:

> Some(DateTime.Now) |> Option.map(fun dt -> dt.Year);;

val it : int option = Some(2008)

如今代码能执行,是由于包括了 DateTime 值的选项值先出现,因此,在 lambda 函数之前被处理;当处理 lambda 函数时。编译器已经知道 dt 的类型肯定是 DateTime,这样。它就能够找到 year 属性。而不会有问题。

到眼下为止,我们已经看到了 C# 和 F# 有关类型判断的相似之处,但 F# 走得更远;如今,我们就看一下 F# 编译器对写高阶函数的帮助。

6.6.1 F# 中函数调用的类型判断的更多相关文章

  1. JS 中对变量类型判断的几种方式

    文章整理搬运,出处不详,如有侵犯,请联系~   数据类型判断和数据类型转换代码工具 在 JS 中,有 5 种基本数据类型和 1 种复杂数据类型,基本数据类型有:Undefined, Null, Boo ...

  2. Python中的Nonetype类型判断

    在学习过程中遇到了程序崩溃,反馈的原因是变量的类型是 Nonetype 那么如何判断该类型 if Lines is None: print(type(Lines)) 其实  Nonetype 就是No ...

  3. JavaScript中关于bool类型判断的一些总结。

    我从书上看到了一些关于   int类型 0 转换成boolean值得时候会把0转换成 false ,string 类型 的  "" 也会装换成false; 所以我就想,我能不能用一 ...

  4. Java中类型判断的几种方式

    1. 前言 在Java这种强类型语言中类型转换.类型判断是经常遇到的.今天就细数一下Java中类型判断的方法方式. 2. instanceof instanceof是Java的一个运算符,用来判断一个 ...

  5. 简答的理解C语言中的各种类型函数

    1.变参函数 变长参数的函数即参数个数可变.参数类型不定 的函数.最常见的例子是printf函数.scanf函数和高级语言的Format函数.在C/C++中,为了通知编译器函数的参数个数和类型可变(即 ...

  6. 在文件夹中 的指定类型文件中 查找字符串(CodeBlocks+GCC编译,控制台程序,仅能在Windows上运行)

    说明: 程序使用 io.h 中的 _findfirst 和 _findnext 函数遍历文件夹,故而程序只能在 Windows 下使用. 程序遍历当前文件夹,对其中的文件夹执行递归遍历.同时检查遍历到 ...

  7. C# 中的值类型和引用类型

    原文 C# 中的值类型和引用类型 值类型(value type):int,long,float,double,decimal,char,bool 和 struct 统称为值类型.值类型变量声明后,不管 ...

  8. C# 中的枚举类型 enum (属于值类型)

    原文 C# 中的枚举类型 enum (属于值类型) C# 支持两种特殊的值类型:枚举和结构. 声明枚举:声明时要声明所有可能的值. using System; using System.Collect ...

  9. java字节中的基本类型的职业的数目 (采访总是问)

    因为移动装置存储器中的移动开发的局限性,数据的字节数需要考虑往往在占领中使用的类型. 下面介绍下一个Java,以加深记忆. 在Java中一共同拥有8种基本数据类型,当中有4种整型,2种浮点类型,1种用 ...

随机推荐

  1. 设计模式(十九)观察者模式 Observer

    模拟场景: 甲方提供了一个气象站的接口,气象站上面装有:温度感应装置.湿度感应装置.气压感应装置. 现在我们是乙方,需要设计一个 WeatherData 对象,从气象站获取数据,并且利用这些数据,更新 ...

  2. Mysql 数值类型

    Mysql数值类型 整数型 小数型(浮点数) 日期时间型

  3. HDU-2236 无题II

    选取不同列不同行的N个数...明摆着叫你二分匹配 二分答案,然后枚举边的范围并跑匈牙利,以此判断答案范围. #include <cstdlib> #include <cstdio&g ...

  4. log4j.xml——java日志处理组件配置简介

    (从一篇好文开始)log4j(一)——为什么要用log4j? 三:看完栗子后的感想 (1)很明显我们在编写代码的时候有各种需要打印日志的需求,比如:我们调试代码的时候:我们的应用出现了问题,我们分析. ...

  5. poj3311Hie with the Pie

    Hie with the Pie Time Limit: 2000MS   Memory Limit: 65536K Total Submissions: 7599   Accepted: 4088 ...

  6. xp局域网共享访问没权限处理

    参考: http://www.360doc.com/content/11/0114/00/905007_86380468.shtml

  7. 表单编码 appliation/x-www-form-urlencoded 与 multipart/form-data 的区别

    当表单使用POST方法时,表单数据提交到服务器端之前有两种编码类型可供选择.默认编码类型为 application/x-www-form-urlencoded,此时所有非字母数字类型的字符都需要转换为 ...

  8. 慕课爬虫实战 爬取百度百科Python词条相关1000个页面数据

    http://www.imooc.com/learn/563 spider_main.py #!/usr/bin/python # coding=utf-8 #from baike_spider im ...

  9. How to debug Android Native Application with eclipse

    This blog is inspired by this tutorial http://mhandroid.wordpress.com/2011/01/23/using-eclipse-for-a ...

  10. 《Vim实用技巧》第2版读书笔记

    学习前的建议: 一.如果你需要一个功能强大的文本编辑器,速度飞快.使用方便.代码补全.编程强大.定制性强,Vim就是你需要的: 二.学习入门曲线陡峭,但是使用后期异常简单,效率超高: 三.号称可以跟上 ...