[swift-evolution] Calling a Specific Implementation

Slava Pestov spestov at apple.com
Fri Aug 19 00:29:04 CDT 2016


> On Aug 18, 2016, at 8:21 PM, Ben Rimmington via swift-evolution <swift-evolution at swift.org> wrote:
> 
> 
>> On 18 Aug 2016, at 16:32, John McCall <rjmccall at apple.com> wrote:
>> 
>> Unapplied method references still dispatch down.  It's a pretty simple experiment to run for yourself.
> 
> When I tried calling a specific superclass implementation, there was a stack overflow due to the infinite recursion.

This is because calling Once.value() with an instance of Twice still dispatches to Twice::value().

> 
> 	class Once {
> 	    func value() -> Int {
> 	        return 1
> 	    }
> 	}
> 
> 	class Twice: Once {
> 	    override func value() -> Int {
> 	        return 2
> 	    }
> 	}
> 
> 	class Thrice: Twice {
> 	    override func value() -> Int {
> 	        return 3
> 
> 	        // EXC_BAD_ACCESS:
> 	        // return Once.value(self)()
> 	    }
> 	}
> 
> 	let once = Once()
> 	once.value()            //-> 1
> 	Once.value(once)()      //-> 1
> 
> 	let twice = Twice()
> 	twice.value()           //-> 2
> 	Once.value(twice)()     //-> 2
> 	Twice.value(twice)()    //-> 2
> 
> 	let thrice = Thrice()
> 	thrice.value()          //-> 3
> 	Once.value(thrice)()    //-> 3
> 	Twice.value(thrice)()   //-> 3
> 	Thrice.value(thrice)()  //-> 3
> 
> -- Ben
> 
> _______________________________________________
> swift-evolution mailing list
> swift-evolution at swift.org
> https://lists.swift.org/mailman/listinfo/swift-evolution



More information about the swift-evolution mailing list