[英]F# Match with discriminated unions
我定义了2个有区别的联合:“方向”和“ TurnCommand”:
type Direction =
| South of string
| East of string
| North of string
| West of string
type TurnCommand =
| Left of string
| Right of string
然后,在制作TurnCommand之后,将函数定义为具有新的Direction:
type Turn = Direction -> TurnCommand -> Direction
这不是此功能的有效实现:
let Do:Turn = fun(startDirection) (turn) ->
match startDirection, turn with
| South, Left -> East
| East, Left -> North
| North, Left -> West
| West, Left -> South
| South, Right -> West
| East, Right -> South
| North, Right -> East
| West, Right -> North
有错误:“ 构造函数应用于0个参数,但期望为1 ”。 我知道它需要字符串值,但是我需要在这里匹配类型。 谢谢!
定义构造函数时(例如South of string
),您说它们需要一个string
参数。 在这些构造函数上进行模式匹配时,您必须使用可变模式来存储提供给构造函数的值(或_
以忽略它),并且在构造值时也必须提供字符串: South s1, Left _ -> East "a string"
。 如果不需要与构造函数关联的任何类型的值,只需从其定义中删除of string
部分。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.