以下示例说明了该问题:
func f(_ a: [Int]){ print("foo") }
func f(_ a: [[Int]]){ print("bar") }
f([])
这不会出现以下错误:
error: ambiguous use of 'f'
f([])
^
note: found this candidate
func f(_ a: [Int]){ }
^
note: found this candidate
func f(_ a: [[Int]]){ }
尽管这不是很好,但可以通过帮助编译器进行诸如f([Int]())
或f([[Int]]())
之类的调用来轻松地规避它。
但是,如果对上面的示例稍加修改,就会变得更加棘手:
func f(_ a: [Int], b: Int = 0){ print("foo") }
func f(_ a: [[Int]]){ print("bar") }
f([])
f([[]])
f([Int]())
此示例可以毫无问题地进行编译,但是可以打印(令人惊讶地)
bar
bar
foo
从我幼稚的角度来看,我可能会遇到编译错误或
foo
bar
foo
版本说明:Apple Swift版本5.0.1(swiftlang-1001.0.82.4 clang-1001.0.46.5)