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

sdg*_*sdh 4 f# module

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

module Foo

let x = 1
let y = 2
Run Code Online (Sandbox Code Playgroud)

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

module Bar

let z = Foo.x + Foo.y
Run Code Online (Sandbox Code Playgroud)

是否可以导入定义Foo是否可以导入不需要限定

就像是:

module Bar

import x from Foo // Not real code

let z = x + Foo.y // x need not be qualified
Run Code Online (Sandbox Code Playgroud)

请注意,我不想导入所有内容Foo

Aar*_*ach 5

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

此外,模块可以使用[<AutoOpen>]属性进行标记,以使其内容无需限定访问即可访问,也可以[<RequireQualifiedAccess>]使用属性进行标记,以使其内容在限定时可访问,即使在open表达式中引用了该模块也是如此。

请参阅这篇 MSDN 文章以获取更多信息。