[swift-evolution] [Review] SE-0029 Remove implicit tuple splat behavior from function applications
Jessy Catterwaul
mr.jessy at gmail.com
Fri Feb 5 14:01:50 CST 2016
I am sorry for taking up your time. To be more concise:
Associated types as argument lists were my only intended usage of this feature. Because the feature does not work for that case, I evaluate this proposal to be magnificent. It will end some confusion.
> On Feb 5, 2016, at 2:31 PM, Chris Lattner <clattner at apple.com> wrote:
>
>>
>> On Feb 5, 2016, at 11:15 AM, Jessy Catterwaul via swift-evolution <swift-evolution at swift.org <mailto:swift-evolution at swift.org>> wrote:
>>
>> I am fine with this proposal, except for having to name the parameter. The argument should be known as $0, within the function. Explanation and example…
>
> Hi Jessy,
>
> I don’t understand what you’re referring to here. The proposal is about removing a feature, not changing existing functionality or adding new things. If you’d like to propose a language change, please do so on a new thread.
>
> -Chris
>
>>
>> My single use case of where this feature might have worked, actually does not. See the double parentheses:
>>
>> protocol Protocol {
>> typealias Arguments
>> func ƒ1(parameters: Arguments) -> Arguments
>> func ƒ2(parameters: Arguments)
>> }
>>
>>
>> struct Struct1: Protocol {
>> typealias Arguments = (goodName: String, otherGoodName: String)
>> func ƒ1(parameters: Arguments) -> Arguments {
>> return (goodName: "", otherGoodName: "")
>> }
>> func ƒ2(parameters: Arguments) {}
>> }
>>
>> let struct1 = Struct1()
>>
>> // Too many parentheses are needed, but whatever.
>> // Not a big deal.
>> let struct1Arguments = struct1.ƒ1((goodName: "", otherGoodName: ""))
>>
>> struct1.ƒ2(struct1Arguments)
>>
>>
>> Typealiases fall apart when I need a single parameter:
>>
>> struct Struct2: Protocol {
>> // Should be (goodName: String) but named 1-tuples don't work.
>> typealias Arguments = String
>>
>> func ƒ1(parameters: Arguments) -> Arguments {return ""}
>> func ƒ2(parameters: Arguments) {}
>> }
>>
>> let struct2 = Struct2()
>>
>> // No extra parentheses are needed but I don't know what the argument is.
>> // This is a big deal.
>> let struct2Arguments = struct2.ƒ1("")
>>
>> struct2.ƒ2(struct2Arguments)
>>
>>
>> We need to be able to name the element of a single-item tuple, and we need to stop enforcing internal parameter names:
>>
>> protocol Protocol {
>> typealias Arguments
>> func ƒ1(Arguments) -> Arguments
>> func ƒ2(Arguments)
>> }
>>
>> struct Struct: Protocol {
>> typealias Arguments = (goodName: String)
>> func ƒ1(Arguments) -> Arguments {
>> return (goodName: $0.goodName)
>> }
>> func ƒ2(Arguments) {}
>> }
>>
>> let `struct` = Struct()
>> let structArguments = `struct`.ƒ1((goodName: ""))
>> `struct`.ƒ2(structArguments)
>> _______________________________________________
>> swift-evolution mailing list
>> swift-evolution at swift.org <mailto:swift-evolution at swift.org>
>> https://lists.swift.org/mailman/listinfo/swift-evolution <https://lists.swift.org/mailman/listinfo/swift-evolution>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.swift.org/pipermail/swift-evolution/attachments/20160205/1685cf08/attachment.html>
More information about the swift-evolution
mailing list