您已经看到了F#程序的基本结构,因此很容易理解F#编程语言的其他基本构建块.
F#程序由各种令牌组成.令牌可以是关键字,标识符,常量,字符串文字或符号.我们可以将F#标记分为两种类型和减号;
关键字
符号和运算符
下表显示了关键字的关键字和简要说明.我们将在后续章节中讨论这些关键字的使用.
关键字 | 描述 |
---|---|
abstract | 表示一种方法,该方法在声明它的类型中没有实现,或者是虚拟的并且具有默认实现. |
and | 用于相互递归绑定,属性声明和泛型参数的多个约束. |
as | 用于为当前类对象提供对象名称.也用于在模式匹配中为整个模式命名. |
assert | 用于在调试期间验证代码. |
base | 用作基类对象的名称. |
begin | 在详细语法中,表示代码块的开始. |
class | 在详细语法中,表示类定义的开始. |
default | 表示抽象方法的实现;与抽象方法声明一起使用以创建虚方法. |
delegate | 用于声明委托. |
do | 用于循环结构或执行命令式代码. |
done | 在详细语法中,表示循环表达式中代码块的结束. |
downcast | 用于转换为继承链中较低的类型. |
downto | 在 for 表达式中,在计数时使用反向. |
elif | 用于条件分支. if的一个简短形式. |
else | 用于条件分支. |
end | 在类型定义和类型扩展中,表示成员定义部分的结尾. 在详细语法中,用于指定以代码块开头的代码块的结尾开始关键字. |
exception | 用于声明异常类型. |
extern | 表示声明的程序元素是在另一个二进制文件或程序集中定义的. |
false | 用作布尔文字. |
finally | 与try一起使用,引入一个代码块,无论是否发生异常都会执行. |
for | 用于循环结构. |
fun | 用于lambda表达式,也称为匿名函数. |
function | 用作较短的替代品有趣的关键字和一个lambda表达式中的匹配表达式,它在一个参数上有模式匹配. |
global | 用于引用顶级.NET命名空间. |
if | 用于条件分支结构. |
in | 用于序列表达式,在详细语法中用于将表达式与绑定分开. |
inherit | 用于指定基类或基本接口. |
inline | 用于表示应直接集成到来电者的功能代码. |
interface | 用于声明和实现接口. |
internal | 用于指定成员在程序集中可见但不在其外部. |
lazy | 用于指定仅在需要结果时才执行的计算. |
let | 用于将名称与值或函数关联或绑定. |
let! | 用于异步将名称绑定到异步计算结果的工作流,或者,在其他计算表达式中,用于将名称绑定到结果的计算类型. |
match | 用于通过将值与模式进行比较来进行分支. |
member | 用于声明对象类型中的属性或方法. |
module | 用于将名称与一组相关类型,值和函数相关联,从逻辑上将其与其他代码分开. |
mutable | 用于声明变量,即可以更改的值. |
用于关联名称与一组相关的类型和模块,从逻辑上将其与其他代码分开. | |
new | 用于声明,定义或调用创建或创建对象的构造函数. 也用于泛型参数约束以指示类型必须具有某个构造函数. |
not | 实际上不是关键字.但是,组合中的结构不是用作通用参数约束. |
null | 表示没有对象. 也用于通用参数约束. |
of | 在受歧视的联合中用于指示值类别的类型,以及在委托和异常声明中. |
open | 用于使命名空间或模块的内容可用而无需限定. |
or | 与布尔条件一起用作布尔值或运算符.相当于||. 也用于成员约束. |
override | 用于实现与基本版本不同的抽象或虚拟方法的版本. |
private | 限制成员访问相同类型或模块的代码. |
public | 允许从外部访问会员类型. |
rec | 用于表示函数是递归的. |
return | 用于指示作为计算表达式结果提供的值. |
return! | 用于表示计算表达式,在计算时,它提供包含计算表达式的结果. |
select | 在查询表达式中使用指定要提取的字段或列.请注意,这是一个上下文关键字,这意味着它实际上不是一个保留字,它只在适当的上下文中表现为关键字. |
static | 用于指示可以在没有类型实例或共享的值成员的情况下调用的方法或属性一个类型的所有实例. |
struct | 用于声明结构类型. 也用于通用参数约束. 用于模块定义中的OCaml兼容性. |
then | 用于条件表达式. 也用于在对象构造后执行副作用. |
to | 用于for循环以表示范围. |
true | 用作布尔文字. |
try | 用于引入可能生成异常的代码块.与一起使用或最终. |
type | 用于声明类,记录,结构,区别联合,枚举类型,度量单位或类型缩写. |
upcast | 用于转换为继承链中较高的类型. |
use | 对于需要调用Dispose的值,使用而不是let免费资源. |
use! | 使用而不是让!在异步工作流和其他计算表达式中,需要调用Dispose来释放资源. |
val | 在签名中用于表示值,或在有限情况下用于声明成员的类型. |
void | 表示.NET void类型.在与其他.NET语言互操作时使用. |
when | 用于模式匹配的布尔条件(当守卫时)并为泛型类型参数引入约束子句. |
while | 介绍一个循环结构. |
with | 与模式匹配表达式中的match关键字一起使用.还用于对象表达式,记录复制表达式和类型扩展以引入成员定义,并引入异常处理程序. |
yield | 在序列表达式中用于生成序列的值. |
yield! | 在计算表达式中用于将给定计算表达式的结果附加到包含的结果集合中计算表达式. |
一些保留的关键字来自OCaml语言 :
asr | land | lor | lsl | lsr | lxor | mod | sig |
保留一些其他保留关键字以供将来扩展F#.
atomic | break | checked | component | const | constraint | constructor |
continue | eager | event | external | fixed | functor | include |
method | mixin | object | parallel | process | protected | pure |
sealed | tailcall | trait | virtual | volatile |
一行注释以//符号开头.
多行注释以(*结尾*结尾)开头).
一般来说,你没有任何明确的入口点对于F#程序.编译F#应用程序时,提供给编译器的最后一个文件成为入口点,该文件中的所有顶级语句都是从上到下执行.
编写良好的程序应该有一个顶级语句可以调用程序的主循环.
一个极简主义的F#程序,它会在屏幕上显示'Hello World':
(* This is a comment *) (* Sample Hello World program using F# *) printfn "Hello World!"
编译并执行程序时,它会产生以下输出 :
Hello World!