【发布时间】:2011-07-11 20:09:42
【问题描述】:
假设我们有这样一个函数:
foo (x, _, y) = (x, y)
它的作用是,它接受一个 3 元组并返回一个由原始元组的第一个和第三个元素组成的对。
现在假设我们要向这个函数传递一个由一些重量级对象组成的 3 元组。是否会复制这两个对象以创建新元组,或者元组的内部表示是否仅包含对对象的引用?
我认为,由于 Haskell 中的数据是不可变的,因此不需要额外的复制,但我只是想确定一下。
如果这种行为是实现定义的,我想知道在这种情况下不同的实现会做什么。
【问题讨论】:
-
foo (Just x', _, Just y') = (Just x', Just y')这可能会重新构造两个'Just',但不会复制x' & y';和foo (x@(Just x'), _, y@(Just y')) = (x, y)可能更有效。 :)