Учебники

F # — Модули

Согласно библиотеке MSDN, модуль F # представляет собой группу конструкций кода F #, таких как типы, значения, значения функций и код в привязках do. Он реализован как класс среды CLR, в котором есть только статические члены.

В зависимости от ситуации, если весь файл включен в модуль, существует два типа объявлений модуля:

  • Объявление модуля верхнего уровня
  • Объявление локального модуля

В декларации модуля верхнего уровня весь файл включен в модуль. В этом случае первое объявление в файле — это объявление модуля. Вам не нужно вставлять объявления в модуль верхнего уровня.

В объявлении локального модуля только объявления, которые имеют отступ под этим объявлением модуля, являются частью модуля.

Синтаксис

Синтаксис для объявления модуля выглядит следующим образом:

// Top-level module declaration.
module [accessibility-modifier] [qualified-namespace.]module-name
   declarations

// Local module declaration.
module [accessibility-modifier] module-name =
   declarations

Обратите внимание, что модификатор accessibility может быть одним из следующих — публичный, приватный, внутренний. По умолчанию это общедоступный .

Следующие примеры продемонстрируют концепции —

Пример 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

Live Demo

// Module1
module module1 =
   // Indent all program elements within modules that are declared with an equal sign.
   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

Когда вы компилируете и запускаете программу, она выдает следующий вывод: