代码:

// 定义一个类
type Person = // 属性定义{ Name: string; Age: int }// 静态属性static member Tom = { Name = "Tom"; Age = 20 }// 静态方法static member GetPerson(name, age) = { Name = name; Age = age }// 成员方法member s.SayHi() = printfn "Hi there, I'm %s and I'm %d years old." s.Name s.Age// 实例化
let jack = { Name = "Jack"; Age = 30 }let tom = Person.Tom// 调用成员方法
jack.SayHi()
tom.SayHi()// 访问属性
printfn "%s" jack.Name
printfn "%d" tom.Age

输出:

Hi there, I'm Jack and I'm 30 years old.
Hi there, I'm Tom and I'm 20 years old.
Jack
20

type Person =
  {Name: string;
   Age: int;}
  with
    member SayHi : unit -> unit
    static member GetPerson : name:string * age:int -> Person
    static member Tom : Person
  end
val jack : Person = {Name = "Jack";
                     Age = 30;}
val tom : Person = {Name = "Tom";
                    Age = 20;}

用 Reflector 反编译生成的 dll, 代码如下:

[Serializable, CompilationMapping(SourceConstructFlags.RecordType)]
public sealed class Person : IEquatable<Program.Person>, IStructuralEquatable, IComparable<Program.Person>, IComparable, IStructuralComparable
{// Fields[DebuggerBrowsable(DebuggerBrowsableState.Never)]internal int Age@;[DebuggerBrowsable(DebuggerBrowsableState.Never)]internal string Name@;// Methodspublic Person(string name, int age);[CompilerGenerated]public sealed override int CompareTo(Program.Person obj);[CompilerGenerated]public sealed override int CompareTo(object obj);[CompilerGenerated]public sealed override int CompareTo(object obj, IComparer comp);[CompilerGenerated]public sealed override bool Equals(Program.Person obj);[CompilerGenerated]public sealed override bool Equals(object obj);[CompilerGenerated]public sealed override bool Equals(object obj, IEqualityComparer comp);[CompilerGenerated]public sealed override int GetHashCode();[CompilerGenerated]public sealed override int GetHashCode(IEqualityComparer comp);public static Program.Person GetPerson(string name, int age);public void SayHi();// Properties[CompilationMapping(SourceConstructFlags.Field, 1)]public int Age { get; }[CompilationMapping(SourceConstructFlags.Field, 0)]public string Name { get; }public static Program.Person Tom { get; }
}

F#学习:类型的定义和使用语法相关推荐

  1. 返回值类型与函数类型不匹配_golang基础语法,定义函数类型 为已存在的数据类型起别名...

    简介 在 GO 语言中还有另外一种定义使用函数的方式,就是函数类型,所谓的函数类型就是将函数作为一种类型可以用来定义变量,这种用法类似于前面我们讲过的 int ,float64,string 等类型, ...

  2. struct类型重定义 不同的基类型_C++学习大纲:联合类型

    C++联合类型 联合类型(又称共同体类型),一种能够表示多种数据(类型可以相同可以不同,变量名字不同就行)的数据类型. 1. 联合类型的定义 union {}; 与结构类型类似,只是把struct 换 ...

  3. F#学习之路(3) 如何组织程序(下)

    二.名称空间(namespace) 名称空间,将一组逻辑上相关的类型.模块放在一起,主要是为了解决名称冲突的问题,同时也便于更好的理解程序结构.F#的名称空间概念及定义与C#基本相似. 1.定义名称空 ...

  4. F#学习之路(2) 深刻理解函数(上)

    函数在函数式编程语言中是一等公民,是函数式语言中最重要的基本组成元素,也是其名称的由来. F# 中的函数之如C#中的类,是组织程序结构的最基本单元.是命令式编程语言中函数或OO编程语言中方法的超集.超 ...

  5. 网站建设学习(九)——JavaScript基础语法(上)

    html作为骨架,css作为装饰,网页页面可以进行建设,但是当网站与用户交互时,就需要一种脚本语言进行沟通,既提升了用户体验,同时也减少了服务器端压力,接下来介绍的第三门语言为JavaScript,一 ...

  6. F#基本类型——Records

    Records是F#里用来表示简单数据的一种基本数据类型,当你想把数据组成一个结构化的格式,而不需要太复杂的语法时,你可以使用Record类型. 声明Records类型: Records的语法格式如下 ...

  7. JAVA运算的类型兼容原则_Java基础语法回顾(一)

    Java基础语法 Java规范 image.png Java字节码 java程序是以".java"为扩展名,当我们编写完java程序后,要执行程序需要经过两个阶段:编译和运行. 编 ...

  8. Kotlin学习笔记(1)-- 基础语法

    文章目录 Kotlin学习笔记(1)-- 基础语法 输出 语法 代码 输出 可读可改(var) 语法 代码 输出 内置数据类型 只读变量(val) 类型推断 编译时常量 语法 代码 输出 引用类型 r ...

  9. [编译原理学习笔记2-2] 程序语言的语法描述

    [编译原理学习笔记2-2] 程序语言的语法描述 文章目录 [编译原理学习笔记2-2] 程序语言的语法描述 [2.3.1] 上下文无关文法 [2.3.2] 语法分析树与二义性 [2.3.3] 形式语言鸟 ...

最新文章

  1. 自定义notebook扩展插件_Notebook各种操作
  2. [scala-spark]9. RDD创建操作
  3. springboot 配置资源映射路径
  4. NGUI中UILabel使用url标签的一个bug
  5. macbook关闭镜像_如何在关闭时让MacBook保持清醒状态
  6. 01 LeNet-5论文笔记-Gradient-Based Learning Applied to Document Recognition
  7. 29 岁成为阿里巴巴 P8,工作前 5 年完成晋升 3 连跳,他如何做到?
  8. 搞定INTEL快速存储技术(用SSD硬盘做缓存加速)
  9. enfuzion与lsf构建渲染集群_集群渲染系统构建及优化
  10. minecraft崩溃java,je1.7.10,进入世界就崩溃,解决一下
  11. 【160313 18:00】四则运算 2 的单元测试
  12. wbarb matlab,图像的高频低频分解
  13. UCOSii和Linux的区别和联系
  14. mysql 创建重复数据库_MySQL数据库,如何处理重复的数据?
  15. 真实可行的android 基站定位代码
  16. 动态链接库(DLL)初始化例程失败 解决方法
  17. 零投资一天赚5000,现在我的目标是一万!
  18. SEAM IN ACTION有空就翻翻
  19. 怎么使用微信打印文档,微信文档如何打印
  20. Eclipse CDT中出现 Nothing to build for XXX 的问题

热门文章

  1. Python学习笔记之Windows下通过pip安装Django详细介绍
  2. xxd命令转换二进制十六进制文件
  3. layui Table分页之后查询bug
  4. scrum回顾_[PM]敏捷开发之Scrum总结
  5. JavaScript——原型/原型链中的顶层对象(图解)
  6. 服务器2016修改时间,服务器时间错误
  7. go语言学习初探(二)基础语法
  8. windows8.1下安装Cygwin并通过apt-cyg安装软件包
  9. Baseline管理
  10. java类与继承的执行顺序