F#函数返回几种类型(返回通用对象类型)?

Nik*_*Nik 0 f# pattern-matching

我继续学习F#模式匹配我的简单函数,如果参数是数字,则返回平方根,否则返回参数.我修改了一下它看起来如下.

let my_sqrt (o: obj) =
  match o with
  | :? float as d -> (sqrt d).ToString()
  | _ as x -> x.ToString()
Run Code Online (Sandbox Code Playgroud)

它适用于我的目的,但如果我不想将返回值转换为字符串怎么办?如何返回"某个对象"然后在printfn "%A" (my_sqrt [| 1; 2; 3 |])构造中使用它?

Tom*_*cek 8

尽管你的例子只是对你想要做的事情的一个演示,但值得指出的是,这可能不是一个好的设计.在F#中,您通常不会使用对使用强制转换的对象进行操作的函数 - 表示这种情况的更好方法是区分联合:

type MyInput = 
  | Numeric of float
  | Other of obj

let my_sqrt = function
  | Numeric d -> Numeric (sqrt d)
  | Other o -> Other o
Run Code Online (Sandbox Code Playgroud)

此功能在一个类型要么是NumericOther,但由于杜,你不需要任何铸造.我认为沿着这些方向的某些方面也可以更好地解决您的实际问题.


Joh*_*mer 5

我想你想要的

let my_sqrt (o: obj) =
  match o with
  | :? float as d -> (sqrt d) :> obj
  | _ as x -> x
Run Code Online (Sandbox Code Playgroud)

只是向上对象