在F#中,如何将类型名称作为函数参数传递?

时间:2013-01-08 18:01:34

标签: types parameters f#

我想将类型名称(例如intstring,甚至是用户定义类型的名称)作为函数参数传递。目前我正在做以下事情:

type IntegerOrIntegerList =
    | Integer of int
    | IntegerList of int list

let f (n : int) (d : 'T) : IntegerOrIntegerList =
    match (box d) with
    | :? int as i -> Integer(n)
    | _ -> IntegerList([0 .. n])

但上面d的存在是偶然的。表达上述逻辑的惯用F#方式是什么?

提前感谢您的帮助。

1 个答案:

答案 0 :(得分:7)

您可以使用类型arg:

let f<'T> (n : int) =
  if typeof<'T> = typeof<int> then Integer(n)
  else IntegerList([0 .. n])