1

刚开始玩F#。和我现在一样可怕,我也不知道要搜索类似的线程。

这就是我想要做的:

let test animal =
    if animal :? Cat //testing for type
    then "cat" 
    elif animal :? Dog //testing for type
    then "dog" 
    elif animal = unicorn //testing value equality
    then "impossible"
    else "who cares"

基本上它涉及类型测试模式匹配以及其他条件检查。我可以像这样完成第一部分(类型检查):

let test(animal:Animal) =
    match animal with
    | :? Cat as cat -> "cat"
    | :? Dog as dog -> "cat"
    | _ -> "who cares"

1.有没有一种方法可以将相等检查(如第一个示例)以及上述类型测试模式匹配结合起来?

2.在一个单一的模式匹配结构中执行的多种检查在 F# 圈子中是否普遍不受欢迎?

4

1 回答 1

5

这是使用模式匹配的等价物:

let test (animal:Animal) =
  match animal with
  | :? Cat as cat -> "cat"
  | :? Dog as dog -> "dog"
  | _ when animal = unicorn -> "impossible"
  | _ -> "who cares"

我不会说这是不受欢迎的。OOP 有时需要它,并且它已经比 C# 等效项更好(更简洁、更清晰)。

于 2013-05-21T21:59:30.933 回答