Swift运算符中inout参数的调用差异及原因咨询
Swift自定义运算符与普通函数的inout参数调用差异解析
核心原因
这是Swift语法设计上的刻意规则,主要基于两点考量:
1. 语法一致性与简洁性
内置的inout相关运算符(如+=、&=)调用时无需显式添加&,自定义中缀运算符遵循同一设计逻辑,让运算符表达式更简洁自然,贴合开发者使用运算符的直觉。比如a += 1不需要写成&a += 1,你的自定义>!运算符同理。
2. 官方规范的明确规定
Swift语言规范中明确:当中缀运算符的左参数标记为inout时,调用时可直接传入变量名,编译器会自动将其视为inout传递,无需显式加&。而普通函数的inout参数必须显式用&标记,目的是区分普通传值和inout传引用语义的调用场景,避免歧义。
代码示例对比
普通函数(需显式&)
func operatorEquivalent <A> (input: inout A, function: (inout A) -> Void ) { function(&input) } operatorEquivalent(&myStruct, myInoutFunction)
自定义中缀运算符(无需&)
infix operator >! func >! <A> (input: inout A, function: (inout A) -> Void ) { function(&input) } myStruct >! myInoutFunction
内容的提问来源于stack exchange,提问作者user22428147
相关产品推荐
相关产品推荐

