Grz*_*cki 4 generics f# type-inference
假设我们有一个非常简单的功能
let fn a = a.ToString()
Run Code Online (Sandbox Code Playgroud)
它的类型被推断为a -> string
但是,将单位值传递给函数会导致NullReferenceException.
在如上所述的简单函数的情况下,这可能很容易解决,但我实际上是在一个更复杂的场景中:
let eitherToHttp e =
match e with
| Either.Ok v -> OK (v.ToString())
| Either.Bad reason -> reasonToErrorCode reason
Run Code Online (Sandbox Code Playgroud)
这种类型是Either<'a, RejectReason> -> WebPart(这里WebPart和Either实际上无关紧要)
在一个场景的类型e是Either<unit, RejectReason>函数抛出酷似在简单的场景.
我怎样才能以一种好的方式克服这个问题?是否应将类型推断为通用类型,如果事实上这不适用于所有类型?
使用内置string函数而不是调用ToString对象:
> string 42;;
val it : string = "42"
> string ();;
val it : string = ""
Run Code Online (Sandbox Code Playgroud)