F# - 模块

根据 MSDN 库,F# 模块是一组 F# 代码构造,例如类型、值、函数值和 do 绑定中的代码。 它被实现为仅具有静态成员的公共语言运行时 (CLR) 类。

根据整个文件是否包含在模块中的情况,模块声明有两种类型 −

  • 顶级模块声明
  • 本地模块声明

在顶级模块声明中,整个文件都包含在模块中。 在这种情况下,文件中的第一个声明是模块声明。 您不必在顶级模块中缩进声明。

在本地模块声明中,只有在该模块声明下缩进的声明才是模块的一部分。

语法

模块声明的语法如下 −

// 顶级模块声明。
module [accessibility-modifier] [qualified-namespace.]module-name
   declarations

// 本地模块声明。
module [accessibility-modifier] module-name =
   declarations

请注意,可访问性修饰符可以是以下之一 − public, private, internal。 默认为 public

以下示例将演示这些概念 −

示例 1

模块文件 Arithmetic.fs −

module Arithmetic
let add x y =
   x + y

let sub x y =
   x - y
	
let mult x y =
   x * y
	
let div x y =
   x / y

程序文件main.fs−

// Fully qualify the function name.
open Arithmetic
let addRes = Arithmetic.add 25 9
let subRes = Arithmetic.sub 25 9
let multRes = Arithmetic.mult 25 9
let divRes = Arithmetic.div 25 9

printfn "%d" addRes
printfn "%d" subRes
printfn "%d" multRes
printfn "%d" divRes

当您编译并执行该程序时,它会产生以下输出 −

34
16
225
2
110
90
1000
10

示例 2

// Module1
module module1 =
   // 缩进模块中用等号声明的所有程序元素。
   let value1 = 100
   let module1Function x =
      x + value1

// Module2
module module2 =
   let value2 = 200

   // Use a qualified name to access the function.
   // from module1.
   let module2Function x =
      x + (module1.module1Function value2)

let result = module1.module1Function 25
printfn "%d" result

let result2 = module2.module2Function 25
printfn "%d" result2

当您编译并执行该程序时,它会产生以下输出 −

125
325