假设我有一个这样的模块:
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
答案 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。