> On Dec 27, 2015, at 4:54 PM, Wallacy <walla...@gmail.com> wrote:
> How to differentiate these functions?

Doug talked about this some in his proposal.

John.

> 
> class A{
>     func someFunc(a: Int) -> Int{
>         return 0;
>     }
>     func someFunc(a: Int) -> Double{
>         return 0;
>     }
>     func someFunc(a: Double) -> Int{
>         return 0;
>     }
>     func someFunc(a: Double) -> Double{
>         return 0;
>     }
>    func someFunc(a: Int, b: Int) -> Int{
>         return 0;
>     }
> }
> 
> Even with backticks would not be possible.
> 
> You may need to reference the method signature altogether.
> 
> var someA = A()
> let fn1 = someA.#someFunc(a: Int) -> Int
> let fn2 = someA.#someFunc(a: Int) -> Double 
> let fn3 = someA.#someFunc(a: Double) -> Int 
> let fn4 = someA.#someFunc(a: Double) -> Double
> 
> An operator at the beginning perhaps?
> 
> let fn1 = #someA.someFunc(a: Int) -> Int
> let fn2 = #someA.someFunc(a: Int) -> Double
> let fn3 = #someA.someFunc(a: Double) -> Int
> let fn4 = #someA.someFunc(a: Double) -> Double
> 
> 
> You may not need the full signature all the time, only necessary to 
> differentiate.
> 
> extension A {
>     func someOtherFunc(a: Int, b: Int) -> Int{
>         return 0;
>     }
>     func someOtherFunc(){
>     }
>     func someOther(){
>     }
> }
> 
> let fn5 = someA.#someOtherFunc(a:, b:)
> let fn6 = someA.#someOtherFunc()
> let fn6 = someA.someOther
> 
> Another possibility:
> 
> let fn5 = #(someA.someOtherFunc(a:, b:))
> let fn5 = @(someA.someOtherFunc(a:, b:))
> 
> Thus the parser can try to just focus on what's inside the #(...) or @(...)
> 
> Em dom, 27 de dez de 2015 às 22:27, John McCall via swift-evolution 
> <swift-evolution@swift.org <mailto:swift-evolution@swift.org>> escreveu:
> > On Dec 27, 2015, at 4:15 PM, Chris Lattner <clatt...@apple.com 
> > <mailto:clatt...@apple.com>> wrote:
> >
> > On Dec 27, 2015, at 4:09 PM, John McCall <rjmcc...@apple.com 
> > <mailto:rjmcc...@apple.com>> wrote:
> >>> I’m a fan of good error recovery, but I don’t think it is a major concern 
> >>> here for two reasons:
> >>>
> >>> 1) The most common case in a method will lack a label, and "thing.foo(_: 
> >>> “ and “thing.foo(:” are both unambiguously a curried reference.
> >>> 2) A common case of accidentally completing a nullary call (thing.foo() 
> >>> vs thing.foo) will produce a type error.  We already produce good QoI for 
> >>> an unapplied function - adding the inverse would be simple.
> >>>
> >>> Further, it will be uncommon *in general* to form a curried reference, so 
> >>> error recovery doesn’t have to be perfect in all the edge cases.  As with 
> >>> other commenters, if it is at all possible to avoid the extra backticks, 
> >>> I’d really prefer that.
> >>
> >> The concern, I think, is that a messed-up normal call might look like a 
> >> curried reference.
> >>
> >> My inclination would be to go the other way: if we get a syntax for this 
> >> that we like, I think we should use it for *all* curried member 
> >> references, and reject things like foo.bar in favor of foo.`bar`.  The 
> >> ability to write foo.bar for a method has always struck me as more clever 
> >> than wise, to be honest.
> >
> > If you were to go that far, I’d suggest looking at this as a different 
> > version of the “." operator.  If you resyntax curried to something else 
> > like (just a strawman, intentionally ugly syntax):
> >
> >       foo.#bar
> >
> > Then you’d get a nice property that the plain old dot operator always has 
> > to be fully applied.  This certainly would be a win for error recovery.  
> > Also, if you did this, you wouldn’t need the backticks from doug’s proposal 
> > either for things like:
> >
> >       foo.#bar(param1:param2:)
> >
> > either.
> 
> Right.  I really like this effect.
> 
> I’m not that bothered by requiring the backticks, especially because it 
> generalizes well to non-member function references, which I’m not sure any 
> sort of different-member-access syntax does.
> 
> John.
> _______________________________________________
> swift-evolution mailing list
> swift-evolution@swift.org <mailto:swift-evolution@swift.org>
> https://lists.swift.org/mailman/listinfo/swift-evolution 
> <https://lists.swift.org/mailman/listinfo/swift-evolution>

_______________________________________________
swift-evolution mailing list
swift-evolution@swift.org
https://lists.swift.org/mailman/listinfo/swift-evolution

Reply via email to