Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/maven/6.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#_Discriminated Union - Fatal编程技术网

F# 我有没有办法完全限定一条受歧视的工会道路?

F# 我有没有办法完全限定一条受歧视的工会道路?,f#,discriminated-union,F#,Discriminated Union,我有没有办法完全限定受歧视的工会路径? 我目前有: type PostionOfScott = | ScottOnFirst | ScottOnSecond | ScottOnThird type PostionOfBrian = | BrianOnFirst | BrianOnSecond | BrianOnThird type PostionOfCherice = | ChericeOnFirst | ChericeOnSe

我有没有办法完全限定受歧视的工会路径?

我目前有:

type PostionOfScott =
    | ScottOnFirst
    | ScottOnSecond
    | ScottOnThird

type PostionOfBrian =
    | BrianOnFirst
    | BrianOnSecond
    | BrianOnThird

type PostionOfCherice =
    | ChericeOnFirst
    | ChericeOnSecond
    | ChericeOnThird
我想这样做:

type PostionOfScott =
    | First
    | Second
    | Third

type PostionOfBrian =
    | First
    | Second
    | Third

type PostionOfCherice =
    | First
    | Second
    | Third
但是,当我提供以下代码时:

(*Functions*)
let hit play batterUp =

    match batterUp with
    | ScottAtBat   -> match play with
                      | Single  -> Scott First
                      | Double  -> Scott Second
                      | Tripple -> Scott Third
我收到以下错误:

错误:此表达式应具有类型 PostionOfScott,但这里有类型 驿站

我理解,如果有任何歧义,将引用最后声明的有区别的联合类型

然而,我有没有办法完全限定一条受歧视的工会道路?
因此,我想减少我的工会案例中的赘言。

我认为为每个球员重复位置类型定义可能不是最好的设计选择。把这些事情分开,这样你的问题自然就会解决,这会更有意义

type Position =
    | First
    | Second
    | Third

type Player =
    | Scott
    | Brian
    | Cherice

type PlayerPosition = {Player : Player; Position : Position}
然后您可以进行模式匹配:

let hit play batterUp =
    match batterUp with
    |{Player = Scott; Position = First} -> ...

我认为为每个球员重复位置类型定义可能不是最佳的设计选择。把这些事情分开,这样你的问题自然就会解决,这会更有意义

type Position =
    | First
    | Second
    | Third

type Player =
    | Scott
    | Brian
    | Cherice

type PlayerPosition = {Player : Player; Position : Position}
然后您可以进行模式匹配:

let hit play batterUp =
    match batterUp with
    |{Player = Scott; Position = First} -> ...

听起来你在寻找属性

[<RequireQualifiedAccess>]
type PositionOfScott =
    | First
    | Second
    | Third
[]
斯考特类型=
|首先
|第二
|第三

这样,您就需要在
PositionOfScott.First
成员之外使用
PositionOfScott.First
而不是
First
。对于具有通常无法描述的值的联合非常有用,例如
Yes
Any

听起来像是在寻找属性

[<RequireQualifiedAccess>]
type PositionOfScott =
    | First
    | Second
    | Third
[]
斯考特类型=
|首先
|第二
|第三

这样,您就需要在
PositionOfScott.First
成员之外使用
PositionOfScott.First
而不是
First
。对于具有通常无法描述的值的联合非常有用,例如
Yes
Any

| Single->Scott First
更改为
|Single->Scott positionofscott.First
,等等。我认为您的应用逻辑错误。为什么不将
position
作为单独的类型?将
|Single->Scott First
更改为
| Single->Scott positionofscott.First
,等等。我认为你的应用逻辑是错误的。为什么不把一个
帖子作为一个单独的类型发布呢?