多参数构造函数比单元组参数构造函数有用吗?

例如,是否曾经有过 like 类型type x = A of int * int优于type y = B of (int * int)? 这种区别实际上意味着什么?


我看到x更糟糕的地方是试图将构造函数的“参数”(似乎是两个参数,但它打印为一个元组)作为一个元组:

type x = A of int * int
type y = B of (int * int)
              
let v = (1, 1)
(* let a = A v  (* Doesn't work *) *)
let b = B v  (* Works *)

(* let f = function
| A v -> v  (* Doesn't work *) *)
let g = function
| B v -> v  (* Works *)

所以看起来它只限制了有多个参数,即使它们具有相同的表示?

回答

他们没有相同的表示。元组的表示需要更多的内存,它需要两个对象而不是一个。

构造的值由标题字表示,每个值后跟一个字。

SoA (x, y)由 3 个词表示:header, x, y

并且B ((x, y))由 2 个词表示:header、tuple。然后元组由3个词表示:header, x,y

A3 个字。共B5 个字。PlusB有两个对象要管理 GC 等等。访问 x 组件A需要一个间接,而 forB它需要两个间接。

如果你的意思A (x, y)B (x, y)语法看起来一样,那是真的。这肯定有点奇怪。但是让它们在内部有所不同是有道理的(正如我试图展示的那样)。


以上是多参数构造函数比单元组参数构造函数有用吗?的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>