F# 库中的枚举类型在链接程序中不可见
Enum Type in F# Library Not Visible in Linked Program
在我构建下面的库然后 link 使用它的程序之后,函数 libInit
、driveList
和 freeSpace
对程序可见 link去了图书馆,这是我所期望的。
我不知道如何引用库中包含的枚举。枚举是可见的还是可以让 linked 程序可见,如果是,它们是如何被引用的?
namespace Toa.volLib
open System
open System.Threading
open System.Collections.Generic
open System.Text
open System.IO
open Microsoft.Win32
[<AutoOpen>]
module volLib =
type volTypes = GB = 1000000000L | Min_c = 5000000000L | Min_d = 10000000000L
let libInit = ref false
let driveList () =
DriveInfo.GetDrives()
let freeSpace drive =
let di = DriveInfo(drive)
di.AvailableFreeSpace
如果 libInit
和模块中的其他函数可见,则表示您已正确链接库。
如果您尝试访问枚举,则需要在其前面加上枚举名称,例如:
let accessEnum = volTypes.GB
这与您可以使用 F# 区分联合类型执行的操作不同。如果你定义一个像
这样的联合
type volUnion =
| GB2
| Min_c2
| Min_d2
然后您可以仅通过其名称访问每个案例,例如:
let accessUnion = GB2
在我构建下面的库然后 link 使用它的程序之后,函数 libInit
、driveList
和 freeSpace
对程序可见 link去了图书馆,这是我所期望的。
我不知道如何引用库中包含的枚举。枚举是可见的还是可以让 linked 程序可见,如果是,它们是如何被引用的?
namespace Toa.volLib
open System
open System.Threading
open System.Collections.Generic
open System.Text
open System.IO
open Microsoft.Win32
[<AutoOpen>]
module volLib =
type volTypes = GB = 1000000000L | Min_c = 5000000000L | Min_d = 10000000000L
let libInit = ref false
let driveList () =
DriveInfo.GetDrives()
let freeSpace drive =
let di = DriveInfo(drive)
di.AvailableFreeSpace
如果 libInit
和模块中的其他函数可见,则表示您已正确链接库。
如果您尝试访问枚举,则需要在其前面加上枚举名称,例如:
let accessEnum = volTypes.GB
这与您可以使用 F# 区分联合类型执行的操作不同。如果你定义一个像
这样的联合type volUnion =
| GB2
| Min_c2
| Min_d2
然后您可以仅通过其名称访问每个案例,例如:
let accessUnion = GB2