我可以从F#模块只导入一个声明吗?

时间:2018-05-31 21:11:13

标签: module f#

假设我有一个这样的模块:

module Foo

let x = 1
let y = 2

现在我可以像这样使用这个模块:

module Bar

let z = Foo.x + Foo.y

是否可以从Foo导入定义,使其不需要合格?

类似的东西:

module Bar

import x from Foo // Not real code

let z = x + Foo.y // x need not be qualified

请注意,我不想从Foo

导入所有内容

1 个答案:

答案 0 :(得分:4)

你不能,没有直接的F#等同于ES6 import { ... } from 'Module'语法。 F#支持将代码组织到模块和命名空间中,但是模块和命名空间都被导入'完整地使用open关键字。如注释中所述,您可以使用本地绑定来简化对值的限定访问(例如let exchangeRange = Conversions.Currency.UsdToCadExchangeRate)或键入别名以简化对类型的合格访问(type Converter = Conversions.Currency.CurrencyConverter)。

此外,模块可以使用[<AutoOpen>]属性进行标记,以使其内容无需合格访问即可访问,或[<RequireQualifiedAccess>]属性使其内容仅在 时可访问,即使模块在open表达式中被引用。

有关详细信息,请参阅this MSDN article