如何解决多参数构造函数比单元组参数构造函数有用吗?
例如,有没有像 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 *)
所以它看起来只限制有多个参数,即使它们具有相同的表示?
解决方法
它们没有相同的表示。元组的表示需要更多的内存,它需要两个对象而不是一个。
一个构造的值由一个标题词表示,每个值后跟一个词。
所以 jinja2.exceptions.TemplateNotFound: bootstrap/index.html
由 3 个词表示:header、A (x,y)
、x
。
而y
由2个词表示:header、tuple。
那么元组由3个词表示:header,B ((x,y))
,x
y
共 3 个字。 A
的总数为 5 个字。另外 B
有两个对象要管理 GC 等等。访问 B
的 x 组件需要一个间接,而对于 A
需要两个间接。
如果您的意思是 B
和 A (x,y)
在语法上看起来相同,那是真的。这肯定有点奇怪。但是让它们在内部有所不同是有必要的(正如我试图展示的那样)。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。