> On Mar 22, 2017, at 11:16 AM, Ricardo Parada <[email protected]> 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 <[email protected] >> <mailto:[email protected]>> wrote: >> >> >>> On Mar 22, 2017, at 10:36 AM, Vladimir.S via swift-evolution >>> <[email protected] <mailto:[email protected]>> wrote: >>> >>> On 22.03.2017 17:37, Ricardo Parada wrote: >>>> >>>> >>>>> On Mar 22, 2017, at 9:30 AM, Vladimir.S <[email protected] >>>>> <mailto:[email protected]>> wrote: >>>>> >>>>> let path = @Bag.things[0].name >>>>> >>>>> bag@path >>>>> [email protected][0].name >>>>> [email protected] <mailto:[email protected]>[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 >>> [email protected] <mailto:[email protected]> >>> https://lists.swift.org/mailman/listinfo/swift-evolution >>> <https://lists.swift.org/mailman/listinfo/swift-evolution> >> >
_______________________________________________ swift-evolution mailing list [email protected] https://lists.swift.org/mailman/listinfo/swift-evolution
