文本

本文提供了一个表,该表展示了如何指定 F# 中的文本类型。

文本类型

下表展示了 F# 中的文本类型。 以十六进制表示法表示数字的字符不区分大小写;标识类型的字符区分大小写。

类型 说明 后缀或前缀 示例
sbyte 有符号 8 位整数 y 86y

0b00000101y
字节 无符号 8 位自然数 uy 86uy

0b00000101uy
int16 有符号 16 位整数 s 86s
uint16 无符号 16 位自然数 us 86us
int

int32
有符号 32 位整数 l 或无 86

86l
uint

uint32
无符号 32 位自然数 u 或 ul 86u

86ul
nativeint 指向有符号自然数的本机指针 n 123n
unativeint 作为无符号自然数的本机指针 un 0x00002D3Fun
int64 有符号 64 位整数 L 86L
uint64 无符号 64 位自然数 UL 86UL
single、float32 32 位浮点数 F 或 f 4.14F4.14finfinityf-infinityf
lf 0x00000000lf
float; double 64 位浮点数 4.142.3E+322.3e+32infinity-infinity
LF 0x0000000000000000LF
bigint 整数不限于 64 位表示形式 I 9999999999999999999999999999I
decimal 表示为定点数或有理数的小数 M 或 m 0.7833M0.7833m
Char Unicode 字符 'a''\u0061'
字符串 Unicode 字符串 "text\n"



@"c:\filename"



"""<book title="Paradise Lost">"""



"string1" + "string2"

另请参阅字符串
字节 ASCII 字符 B 'a'B
byte[] ASCII 字符串 B "text"B
字符串或字节[] 逐字字符串 @ 前缀 @"\\server\share" (Unicode)

@"\\server\share"B (ASCII)

命名文本

可以使用 Literal 属性标记旨在成为常量的值。

此属性具有导致将值编译为常量的效果。 在以下示例中,以下 xy 都是不可变值,但 x 在运行时计算,而 y 是编译时常量。

let x = "a" + "b" // evaluated at run-time

[<Literal>]
let y = "a" + "b" // evaluated at compile-time

例如,在调用外部函数时,这种区别很重要,因为 DllImport 是一个属性,它需要在编译期间知道 myDLL 的值。 如果没有 [<Literal>] 声明,此代码将无法编译:

[<Literal>]
let myDLL = "foo.dll"

[<DllImport(myDLL, CallingConvention = CallingConvention.Cdecl)>]
extern void HelloWorld()

在模式匹配表达式中,以小写字符开头的标识符始终被视为要绑定的变量,而不是文本,因此在定义文本时,通常应该将首字母大写。

[<Literal>]
let SomeJson = """{"numbers":[1,2,3,4,5]}"""

[<Literal>]
let Literal1 = "a" + "b"

[<Literal>]
let FileLocation =   __SOURCE_DIRECTORY__ + "/" + __SOURCE_FILE__

[<Literal>]
let Literal2 = 1 ||| 64

[<Literal>]
let Literal3 = System.IO.FileAccess.Read ||| System.IO.FileAccess.Write

注解

命名文本适用于:

  • 不带 when 子句的模式匹配。
  • 属性参数。
  • 静态类型提供程序参数。

Unicode 字符串可以包含显式编码或 UTF-32 编码,前者可以使用 \u 后跟 16 位十六进制代码 (0000 - FFFF) 来指定,后者可以使用 \U 后跟代表任何 Unicode 码位的 32 位十六进制代码 (00000000 - 0010FFFF) 来指定。

不允许使用除 ||| 外的位运算符。

其他基数中的整数

还可以分别使用 0x0o0b 前缀以十六进制、八进制或二进制指定有符号 32 位整数。

let numbers = (0x9F, 0o77, 0b1010)
// Result: numbers : int * int * int = (159, 63, 10)

数值文本中的下划线

可以使用下划线字符 (_) 分隔数字。

let value = 0xDEAD_BEEF

let valueAsBits = 0b1101_1110_1010_1101_1011_1110_1110_1111

let exampleSSN = 123_45_6789

特殊浮点无穷大值

floatsingle 浮点数值类型都具有表示正无穷大和负无穷大的相关特殊值。

F# 值 F# 类型 相应的 .NET 值
infinity+infinity float PositiveInfinity
-infinity float NegativeInfinity
infinityf+infinityf single PositiveInfinity
-infinityf single NegativeInfinity

这些值可以直接使用,也可以在除以浮点零或数字太小而无法由给定类型表示时返回。 例如:

> 1.0/0.0;;
val it: float = infinity

> 1.0/(-0.0);;
val it: float = -infinity

> 1.0/0.00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001
;;
val it: float = infinity