【发布时间】:2014-10-25 10:42:34
【问题描述】:
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
这就是为什么我认为我需要一个通用的最大值。
【问题讨论】:
-
我不这么认为(好吧,从来没有见过这样的东西 - 也许有一个) - IMO 这没有多大意义因为有没有 所有类型的最大值。
-
你到底想做什么?以通用方式获得最大值可能不是特别有用
-
参见github.com/gmpl/FsControl,按照hackage.haskell.org/package/base-4.7.0.1/docs/…中的定义实现
Bounded,然后发送拉取请求。 -
@MauricioScheffer 好建议。我只是 added 给 FsControl 。
-
@Gustavo:你能做一个 FsControl.Core 中 Bounded 的示例用法吗?
标签: .net f# max minimum unchecked