generics - ToString 为单位值抛出 NullReferenceException ()

标签 generics f# type-inference

假设我们有一个非常简单的函数

let fn a = a.ToString()

它的类型被推断为 a -> string 但是,将单位值传递给函数会导致 NullReferenceException。

对于像上面这样的简单函数,这可能很容易解决,但我实际上处于更复杂的场景中:

let eitherToHttp e = 
    match e with
    | Either.Ok v ->        OK (v.ToString()) 
    | Either.Bad reason ->  reasonToErrorCode reason

其类型为Either<'a, RejectReason> -> WebPart (WebPartEither 实际上是什么在这里无关紧要)

e 类型的场景中是 Either<unit, RejectReason>该函数的抛出与简单场景中完全相同。

我怎样才能以一种好的方式克服这个问题? 如果实际上这不适用于所有类型,是否应该将类型推断为通用类型?

最佳答案

使用内置的string函数而不是在对象上调用ToString:

> string 42;;
val it : string = "42"
> string ();;
val it : string = ""

关于generics - ToString 为单位值抛出 NullReferenceException (),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41347374/

相关文章:

javascript - 如何使用算法 W 键入检查递归定义?

c# - 带有接口(interface)列表的接口(interface)

java - 编译器为什么以及如何区别对待这两个条件?

Java泛型转换

Java 泛型和扩展的比较

recursion - F# 中的递归函数

scala - Scala运算符#>导致编译错误,但不会导致编译错误->为什么?

enums - 为什么不能在匹配武器中推断出枚举变体?

haskell - 将两个(或多个)选项值应用于 F# 中的函数的正确方法

f# - 在不同的泛型实例中实现相同的接口(interface)