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
,等等。我认为你的应用逻辑是错误的。为什么不把一个帖子作为一个单独的类型发布呢?