哪些元组转换应当可自定义?
作者: zygoloid创建于 2026年9月1日更新于 2026年9月1日
标签leads question
问题总结:
通常看来,我们的内置转换大多数(或甚至全部)都应该表现得像是 final 一样。例如,给定:
class From {}
class To {}
impl From as ImplicitAs(To);
允许 impl (From, From) as ImplicitAs((To, To)) 来自定义转换似乎不是一个好主意。但是,我们应该把这个做到多远呢?
例如:
- 是否应该允许
impl (To, To) as ImplicitAs((From, From))?(我们是否只是优先考虑内置转换,然后才回退到用户定义的转换?) - 是否应该允许
impl (From, From) as ImplicitAs((To, To, To))?(我们是否只因为源和目标是元组,就承诺了一个内置转换,还是先检查一下参数数量是否匹配?)
详细信息:
我们的孤儿规则允许对这种转换进行自定义,前提是源和/或目标类型涉及用户定义的类型,但在上面的示例中,它确实如此。根据我们当前对 final 的模型(即,它并不阻止重叠,只是更喜欢在重叠中使用 final impl),我们似乎没有一个很好的工具来告诉库“所有 (...) 到 (...) 的转换都是我的,但其中只有一部分可以工作”,除了单形化失败之外。
内容来源: carbon-language/carbon-lang