Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/fsharp/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
F# 类型构造函数的别名是否可以与类型的别名相同?_F# - Fatal编程技术网

F# 类型构造函数的别名是否可以与类型的别名相同?

F# 类型构造函数的别名是否可以与类型的别名相同?,f#,F#,考虑以下几点: module Module1 = type Foo = Bar | Baz type Lorem = {Ipsum: int} module Module2 = type Foo = Module1.Foo type Lorem = Module1.Lorem let foo = Bar // Error: The value or constructor 'Bar' is not defined let lorem = {Ipsum = 2}

考虑以下几点:

module Module1 =

  type Foo = Bar | Baz

  type Lorem = {Ipsum: int}

module Module2 =

  type Foo = Module1.Foo
  type Lorem = Module1.Lorem

  let foo = Bar // Error: The value or constructor 'Bar' is not defined

  let lorem = {Ipsum = 2} // Error: The record label 'Ipsum' is not defined
是否可以以简单的方式对类型进行别名,并且仍然能够实际构造它们,而无需打开
Module1


背景:我正在创建一个应用程序和相应的web API。他们将通过序列化和反序列化POCO(POFOs?)相互交谈,POFOs的定义在应用程序和web API引用的项目中的模块(对应于
Module1
)中可用。API和类型是版本化的,因此我希望在应用程序和web API中有一个
types
模块(对应于
Module2
),我只需将API类型的最新版本别名(例如
type Foo=Shared.V2.Foo
),然后在应用程序和API中使用这些别名,因为这意味着我不需要在整个app/API中引用特定的版本。(如果这是一个糟糕的想法,请告诉我。)

您的类型别名在现有代码中完全没有使用。如果您通过以下方式限定这些标识符来显式使用它们,则此操作有效:

let foo = Foo.Bar

let lorem = {Lorem.Ipsum = 2}

我明白了,谢谢。它的用法似乎与通常定义类型并用
RequireQualifiedAccess
修饰的用法类似。这是正确的吗?有没有办法不用在任何地方对它们进行鉴定就可以使用它们呢?我不会说这就像使用
RequireQualifiedAccess
。在
Module1
中,
Foo
是一个类型,
Bar
是由类型声明隐式创建的值。在
Module2
中,
Bar
根本不存在。无法将其连接到
Module2.Foo
类型别名。