Điều thú vị này. Tôi không nghĩ rằng điều đó có thể xảy ra nếu không thực hiện điều gì đó theo đề xuất của @ marcos. Vấn đề bạn là bạn có thể “ném” các tên trong các bộ:
let named_pair = (s: "hello", i: 1)
named_pair.s // hello
let anon_pair = named_pair as (String,Int)
// or anon_pair: (String,Int) = named_pair, if you prefer
anon_pair.s // no such member 's'
Bây giờ giả sử bạn xác định hai chức năng, giống hệt nhau ngoại trừ lý lẽ ai đã đặt tên:
func f(s: String, i: Int) { println("_: \(s)") }
func f(#s: String, #i: Int) { println("s: \(s)") }
Sau đó, bạn có thể gọi nó qua tuples với tên vs luận giấu tên:
f(named_pair) // prints s: hello
f(anon_pair) // prints _: hello
// but if you try to call a named argument function with unnamed tuples:
func g(# s: String, # i: Int) { println("s: \(s)") }
g(anon_pair) // compiler error
let h = g
h(anon_pair) // compiler error
h(named_pair) // works
Nhưng bởi vì bạn có thể bỏ đi những cái tên bạn có thể làm điều này:
// compiles and runs just fine...
(g as (String,Int)->())(anon_pair)
let k: (String,Int)->() = g
// as does this
k(anon_pair)
Và khả năng này để làm điều này có nghĩa là không thể sử dụng loại để phân biệt một hàm bị quá tải chỉ bởi tên đối số, theo như tôi có thể nói.
Nguồn
2015-02-02 20:27:25
Hãy cho tôi biết Nếu câu trả lời của tôi đã giúp bạn. Tôi có thể cố gắng giúp đỡ nhiều hơn –