繁体   English   中英

F#与有区别的工会匹配

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM