F# 在f中声明泛型函数

F# 在f中声明泛型函数,f#,F#,我正在尝试用F编写我的第一个泛型函数,这里似乎缺少了一些概念: module Assert = let ThrowsException<'e : exn> functionUnderTest = try let result = functionUnderTest printfn "fails" with | :? 'e -> printfn "succeeds" | _ -> pri

我正在尝试用F编写我的第一个泛型函数,这里似乎缺少了一些概念:

module Assert =
    let ThrowsException<'e : exn>  functionUnderTest  =
    try 
        let result = functionUnderTest
        printfn "fails"
    with 
    | :? 'e  ->  printfn  "succeeds"
    | _  -> printfn "fails"
我想实现这个测试工具,所以如果有人有一个解决方案,这很好,但另外,我正在学习F,我想知道我在尝试编写这样的函数时出错的地方

最终代码:

错误显示应为'>',因为类型约束在'T:>baseType时采用'T'形式。您的代码应该是:

module Assert =
  let ThrowsException<'e when 'e :> exn> functionUnderTest =
    try 
      let result = functionUnderTest
      printfn "fails"
    with 
      | :? 'e -> printfn  "succeeds"
      | _  -> printfn "fails"
有关详细信息,请参阅。

错误显示预期的'>',因为类型约束的形式为'T when'T:>baseType。您的代码应该是:

module Assert =
  let ThrowsException<'e when 'e :> exn> functionUnderTest =
    try 
      let result = functionUnderTest
      printfn "fails"
    with 
      | :? 'e -> printfn  "succeeds"
      | _  -> printfn "fails"

有关更多信息,请参阅。

Brilliant!非常感谢,我一直在玩when和:>但是由于某种原因,我从来没有按这个顺序玩过。我也来看看链接。太棒了!非常感谢,我一直在玩when和:>但是由于某种原因,我从来没有按这个顺序玩过。我也会看看这个链接。
module Assert =
  let ThrowsException<'e when 'e :> exn> functionUnderTest =
    try 
      let result = functionUnderTest
      printfn "fails"
    with 
      | :? 'e -> printfn  "succeeds"
      | _  -> printfn "fails"