F#学习:类型的定义和使用语法
代码:
// 定义一个类
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#学习:类型的定义和使用语法相关推荐
- 返回值类型与函数类型不匹配_golang基础语法,定义函数类型 为已存在的数据类型起别名...
简介 在 GO 语言中还有另外一种定义使用函数的方式,就是函数类型,所谓的函数类型就是将函数作为一种类型可以用来定义变量,这种用法类似于前面我们讲过的 int ,float64,string 等类型, ...
- struct类型重定义 不同的基类型_C++学习大纲:联合类型
C++联合类型 联合类型(又称共同体类型),一种能够表示多种数据(类型可以相同可以不同,变量名字不同就行)的数据类型. 1. 联合类型的定义 union {}; 与结构类型类似,只是把struct 换 ...
- F#学习之路(3) 如何组织程序(下)
二.名称空间(namespace) 名称空间,将一组逻辑上相关的类型.模块放在一起,主要是为了解决名称冲突的问题,同时也便于更好的理解程序结构.F#的名称空间概念及定义与C#基本相似. 1.定义名称空 ...
- F#学习之路(2) 深刻理解函数(上)
函数在函数式编程语言中是一等公民,是函数式语言中最重要的基本组成元素,也是其名称的由来. F# 中的函数之如C#中的类,是组织程序结构的最基本单元.是命令式编程语言中函数或OO编程语言中方法的超集.超 ...
- 网站建设学习(九)——JavaScript基础语法(上)
html作为骨架,css作为装饰,网页页面可以进行建设,但是当网站与用户交互时,就需要一种脚本语言进行沟通,既提升了用户体验,同时也减少了服务器端压力,接下来介绍的第三门语言为JavaScript,一 ...
- F#基本类型——Records
Records是F#里用来表示简单数据的一种基本数据类型,当你想把数据组成一个结构化的格式,而不需要太复杂的语法时,你可以使用Record类型. 声明Records类型: Records的语法格式如下 ...
- JAVA运算的类型兼容原则_Java基础语法回顾(一)
Java基础语法 Java规范 image.png Java字节码 java程序是以".java"为扩展名,当我们编写完java程序后,要执行程序需要经过两个阶段:编译和运行. 编 ...
- Kotlin学习笔记(1)-- 基础语法
文章目录 Kotlin学习笔记(1)-- 基础语法 输出 语法 代码 输出 可读可改(var) 语法 代码 输出 内置数据类型 只读变量(val) 类型推断 编译时常量 语法 代码 输出 引用类型 r ...
- [编译原理学习笔记2-2] 程序语言的语法描述
[编译原理学习笔记2-2] 程序语言的语法描述 文章目录 [编译原理学习笔记2-2] 程序语言的语法描述 [2.3.1] 上下文无关文法 [2.3.2] 语法分析树与二义性 [2.3.3] 形式语言鸟 ...
最新文章
- 自定义notebook扩展插件_Notebook各种操作
- [scala-spark]9. RDD创建操作
- springboot 配置资源映射路径
- NGUI中UILabel使用url标签的一个bug
- macbook关闭镜像_如何在关闭时让MacBook保持清醒状态
- 01 LeNet-5论文笔记-Gradient-Based Learning Applied to Document Recognition
- 29 岁成为阿里巴巴 P8,工作前 5 年完成晋升 3 连跳,他如何做到?
- 搞定INTEL快速存储技术(用SSD硬盘做缓存加速)
- enfuzion与lsf构建渲染集群_集群渲染系统构建及优化
- minecraft崩溃java,je1.7.10,进入世界就崩溃,解决一下
- 【160313 18:00】四则运算 2 的单元测试
- wbarb matlab,图像的高频低频分解
- UCOSii和Linux的区别和联系
- mysql 创建重复数据库_MySQL数据库,如何处理重复的数据?
- 真实可行的android 基站定位代码
- 动态链接库(DLL)初始化例程失败 解决方法
- 零投资一天赚5000,现在我的目标是一万!
- SEAM IN ACTION有空就翻翻
- 怎么使用微信打印文档,微信文档如何打印
- Eclipse CDT中出现 Nothing to build for XXX 的问题