现在tuple
在SML中只是record
,我试过了:
上面的代码我希望这条记录可以接受一个元组,但它报告错误。
所以,没有从元组到记录以及从记录到元组的隐式转换(虽然没有在这里发布,但我实际上已经在本地试过了。)
我的问题是为什么SML不提供这样的转换?(因为这些转换在c ++中非常频繁)
答案 0 :(得分:1)
元组是名为1到n的成员的记录。也就是说,三元素元组(a, b, c)
实际上是记录{1 = a, 2 = b, 3 = c}
。因此,不需要在元组和记录之间进行隐式转换,因为它们已经是相同的东西。
现在,您定义的函数会对成员x
,y
和z
进行记录,然后将成员1
,{{1}的记录传递给它}和2
。这不起作用。为了实现这一目标,需要在具有不同成员名称的记录之间进行隐式转换,这似乎是一个非常糟糕的主意。
(因为这些转换在c ++中非常频繁)
在不相关的结构或具有不同成员的类(甚至是相同的成员)之间,C ++中没有隐式转换。要做到这一点,你需要3
(或在地址上投射C风格的指针),这既不常见也不好(除了POD类型之外不会使用任何东西) )。