Unchecked.defaultof<'T>
生成任何类型的默认值。是否存在这样的泛型函数来为具有最大值/最小值的类型有意义的任何类型生成最大值/最小值?
编辑
要回答约翰·帕默(John Palmer)的问题,我认为这将是有用的:我想创建以下函数的“可变”版本:
let InternalArrDiffMax (s : 'T []) (diff : 'T -> 'T -> 'C) =
s
|> Array.mapi (fun i e ->
[| for j in i + 1 .. s.Length - 1 -> diff e s.[j] |]
|> Array.maxBy (fun n -> n))
|> Array.maxBy (fun e -> e)
因为我不能在不给变量赋值的情况下声明可变变量,所以我认为除了以下以外,没有其他方法可以做到:
let InternalArrDiffMax (s : 'T []) (diffFun : 'T -> 'T -> 'C) =
let mutable max : 'C = // Generic max of 'C if it makes sense
for i in 0 .. s.Length - 1 do
for j in i + 1 .. s.Length - 1 do
let diff = diffFun s.[i] s.[j]
if (i = 0 && j = 1) || max < diff then
max <- diff
max
这就是为什么我认为我需要通用最大值。
如果您必须沿这条路线前进,那么总会有反思。但是,我建议不要将其MaxValue
用作带外值或特殊值。
let inline tryGetMaxValue< ^a> () =
match typeof< ^a>.GetField("MaxValue") with
| null -> None
| fieldInfo -> fieldInfo.GetValue() |> unbox< ^a> |> Some
let maxvi = tryGetMaxValue<int>() // val maxvi : int option = Some 2147483647
let maxvf : float option = tryGetMaxValue() // val maxvf : float option = Some 1.797693135e+308
let maxvs : string option = tryGetMaxValue() // val maxvs : string option = None
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句