That was my point... `foo` doesn’t have a `T: Numeric` version, therefore when 
it calls `isNumeric` the compiler has to call the version that always return 
false. `bar` is overloaded with both a `T` and a `T: Numeric` version, so there 
the compiler can call the most appropriate version of `isNumeric`.

- Dave Sweeris

> On Oct 5, 2017, at 01:49, Alex Blewitt <alb...@apple.com> wrote:
> 
> I think one of your 'foo' or 'bar' is missing a <T:Numeric>, as otherwise the 
> functions are identical ...
> 
> Alex
> 
>> On 5 Oct 2017, at 09:23, David Sweeris via swift-users 
>> <swift-users@swift.org> wrote:
>> 
>> 
>> On Oct 4, 2017, at 18:30, Kevin Lundberg via swift-users 
>> <swift-users@swift.org> wrote:
>> 
>>> Can you do something like this?
>>> 
>>> func isNumber<T: Numeric>(_ value: T) -> Bool { return true }
>>> 
>>> func isNumber<T>(_ value: T) -> Bool { return false }
>>> 
>>> I don't recall whether or not swift will pick the right version of the 
>>> function here, or whether this can even compile (mac isnt open at the 
>>> moment), but if you can overload functions in this way then it might be 
>>> much nicer than checking for lots of concrete types.
>>> 
>> 
>> It’ll compile, but you’ll get the wrong answer if it’s called from another 
>> generic function that isn’t similarly overloaded for `T` vs `T: Numeric`. 
>> I’m not at my computer right now, but IIRC, this is correct:
>> 
>> func foo<T> (_ value:T) -> Bool {
>>     return isNumber(value)
>> }
>> func bar<T> (_ value:T) -> Bool {
>>     return isNumber(value)
>> }
>> func bar<T: Numeric> (_ value:T) -> Bool {
>>     return isNumber(value)
>> }
>> isNumber(0) //true
>> isNumber(“”) //false
>> foo(0) //false
>> foo(“”) //false
>> bar(0) //true
>> bar(“”) //false
>> 
>> - Dave Sweeris
>> _______________________________________________
>> swift-users mailing list
>> swift-users@swift.org
>> https://lists.swift.org/mailman/listinfo/swift-users
> 
_______________________________________________
swift-users mailing list
swift-users@swift.org
https://lists.swift.org/mailman/listinfo/swift-users

Reply via email to