[swift-evolution] Smart KeyPaths
Matthew Johnson
matthew at anandabits.com
Wed Mar 22 11:42:29 CDT 2017
> On Mar 22, 2017, at 11:41 AM, Ricardo Parada <rparada at mac.com> wrote:
>
> Agree.
>
> Another question. If `Bag` does have a static thing called `myStaticThingy` would you refer to it as:
>
> Bag.Type#myStaticThingy
I would expect that to work eventually but I’m not sure if it would be included in the initial proposal or not.
>
> ?
>
>
>> On Mar 22, 2017, at 12:37 PM, Matthew Johnson <matthew at anandabits.com <mailto:matthew at anandabits.com>> wrote:
>>
>>>
>>> On Mar 22, 2017, at 11:16 AM, Ricardo Parada <rparada at mac.com <mailto:rparada at mac.com>> wrote:
>>>
>>> I see three possibilities:
>>>
>>> 1) # + «space» +«path» like this:
>>>
>>> let path = # Bag.things[0].name
>>> bag[path]
>>> bag[# Bag.things[0].name]
>>> bag[# .things[0].name] // Root is inferred as Bag
>>> bag.things[0][# Thing.name]
>>> bag.things[0][# .name] // Root is inferred as Thing
>>>
>>> 2) # + «path» like this::
>>>
>>> let path = #Bag.things[0].name
>>> bag[path]
>>> bag[#Bag.things[0].name]
>>> bag[# .things[0].name] // Root is inferred as Bag
>>> bag.things[0][#Thing.name]
>>> bag.things[0][#.name] // Root is inferred as Thing
>>>
>>> 3) «Root» + # + «path» like this:
>>>
>>> let path = Bag#things[0].name
>>> bag[path]
>>> bag[Bag#things[0].name]
>>> bag[#things[0].name]
>>> bag.things[0][#name]
>>> bag.things[0][Thing#name]
>>
>> I prefer the third option. I don’t think we should go with the first option. Allowing (or requiring) a space seems likely to be confusing. Both the first and the second still have potential to be confusing. If `Bag` has a static property named `things` people could be confused about what `#Bag.things` refers to. If we’re going to use a special sigil it should be positioned such that it eliminates potential for that kind of confusion.
>>
>>>
>>>
>>>
>>>> On Mar 22, 2017, at 11:47 AM, Matthew Johnson <matthew at anandabits.com <mailto:matthew at anandabits.com>> wrote:
>>>>
>>>>
>>>>> On Mar 22, 2017, at 10:36 AM, Vladimir.S via swift-evolution <swift-evolution at swift.org <mailto:swift-evolution at swift.org>> wrote:
>>>>>
>>>>> On 22.03.2017 17:37, Ricardo Parada wrote:
>>>>>>
>>>>>>
>>>>>>> On Mar 22, 2017, at 9:30 AM, Vladimir.S <svabox at gmail.com <mailto:svabox at gmail.com>> wrote:
>>>>>>>
>>>>>>> let path = @Bag.things[0].name
>>>>>>>
>>>>>>> bag at path
>>>>>>> bag at .things[0].name
>>>>>>> bag at Bag.things <mailto:bag at Bag.things>[0].name
>>>>>>> bag.things[0]@.name
>>>>>>> bag.things[0]@Thing.name
>>>>>>
>>>>>> It sounds like the @ character is serving two different purposes which confused me at first.
>>>>>>
>>>>>> If I understood correctly, you are using it to get the key path but also to apply the key path to the bag struct and get the corresponding value.
>>>>>>
>>>>>
>>>>> Yes. And the initial proposal suggest the following syntax accordingly:
>>>>>
>>>>> let path = Bag.things[0].name
>>>>> bag[path]
>>>>> bag[.things[0].name]
>>>>> bag[Bag.things[0].name]
>>>>> bag.things[0][.name]
>>>>> bag.things[0][Thing.name]
>>>>
>>>> # makes a lot more sense than @ as a sigil. It follows from #selector and #keyPath. These are the most similar language features right now where the compiler produces special values. I think it’s also worth noticing that values produced by #selector and #keyPath are used in normal ways. There is no magic syntax for their use, just a typed value. If we’re going to make a change we should use # instead of `.` for accessing these special values but we should stick with subscript for use.
>>>>
>>>>> _______________________________________________
>>>>> 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/20170322/2dbda304/attachment.html>
More information about the swift-evolution
mailing list