[swift-users] Can't declare variable with same name as func called to assign its initial value

Evan Maloney emaloney at gilt.com
Thu May 12 14:22:14 CDT 2016


> On May 12, 2016, at 3:12 PM, Erica Sadun <erica at ericasadun.com> wrote:
> 
> I'm going to go with the classic answer: http://www.urbandictionary.com/define.php?term=Henny+Youngman+problem <http://www.urbandictionary.com/define.php?term=Henny+Youngman+problem>
> 
> consider: let sale2 = sale
> you could then run sale2(options: options)
> 
> So why should let sale = sale be any different?

Shouldn't the use of the 'options' parameter label result in the function name not clashing with the generic 'sale'?

In the case of the error line itself, I would've assumed from the context that the compiler would know that I wanted to invoke the function named 'sale' rather than refer to the function in the abstract. The passing of the parameter value should be enough of a tip-off about that, no?

And from that line on within the local scope, I'd understand if a local variable named 'sale' shadowed a no-arg function also named 'sale', but given that this function is really named 'sale(options:)', I would've thought this'd work.


>> On May 12, 2016, at 1:07 PM, Evan Maloney via swift-users <swift-users at swift.org <mailto:swift-users at swift.org>> wrote:
>> 
>> Adopting the newer Swift style of preferring first parameter labels, I wrote a function:
>> 
>>    func sale(options options: DeepLinkOptions)
>>        throws
>>        -> Sale
>>    {
>>        // ...implementation...
>>    }
>> 
>> I then tried calling it elsewhere, and setting the result to a variable named 'sale', which is coincidentally the same name as the function above:
>> 
>>    let sale = try sale(options: options)
>> 
>> This line won't compile, failing with the following error and a caret pointing at the second use of 'sale':
>> 
>>    variable used within its own initial value
>> 
>> In the past, I would've named the function above according to Objective-C conventions, and it might've ended up with a name like 'saleWithOptions'; there'd be no clash. However, with the more terse Swift 3.0 style, we'll probably end up with more situations like mine.
>> 
>> Is this (should this be?) considered a bug or compiler limitation? Should I file a JIRA? There doesn't seem to be anything for this on bugs.swift.org <http://bugs.swift.org/> yet.
> 
> I'm going to go with the classic answer: http://www.urbandictionary.com/define.php?term=Henny+Youngman+problem <http://www.urbandictionary.com/define.php?term=Henny+Youngman+problem>
> 
> consider: let sale2 = sale
> you could then run sale2(options: options)
> 
> So why should let sale = sale be any different?

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.swift.org/pipermail/swift-users/attachments/20160512/01f2e0b6/attachment.html>


More information about the swift-users mailing list