我有这样的变体类型:
type score =
InInteger of int
| InFloat of float ;;
Run Code Online (Sandbox Code Playgroud)
现在,给出两个分数(InInteger(5)和InFloat(5.5)),我想添加,减去它们等.
如何才能做到这一点?
PS - 我是OCaml的新手.
编辑::
进一步来说:
这是如何运作的?
let n = InInt(2);;
let m = InFloat(3.2);;
let var = InFloat(float n +. m);;
Run Code Online (Sandbox Code Playgroud)
首先,受歧视的联盟需要以大写字母开头的标识符:
type score =
InInteger of int
| InFloat of float
Run Code Online (Sandbox Code Playgroud)
其次,您可以add通过匹配所有可能情况的模式并返回适当的值来定义此数据类型的函数:
let add s1 s2 =
match s1, s2 with
| InInteger i1, InInteger i2 -> InInteger (i1 + i2)
| InInteger i1, InFloat f2 -> InFloat (float i1 +. f2)
| InFloat f1, InInteger i2 -> InFloat (f1 +. float i2)
| InFloat f1, InFloat f2 -> InFloat (f1 +. f2)
Run Code Online (Sandbox Code Playgroud)