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]



> On Mar 22, 2017, at 11:47 AM, Matthew Johnson <matt...@anandabits.com> wrote:
> 
> 
>> On Mar 22, 2017, at 10:36 AM, Vladimir.S via swift-evolution 
>> <swift-evolution@swift.org <mailto:swift-evolution@swift.org>> wrote:
>> 
>> On 22.03.2017 17:37, Ricardo Parada wrote:
>>> 
>>> 
>>>> On Mar 22, 2017, at 9:30 AM, Vladimir.S <sva...@gmail.com 
>>>> <mailto:sva...@gmail.com>> wrote:
>>>> 
>>>> let path = @Bag.things[0].name
>>>> 
>>>> bag@path
>>>> bag@.things[0].name
>>>> bag@Bag.things <mailto:bag@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@swift.org <mailto:swift-evolution@swift.org>
>> https://lists.swift.org/mailman/listinfo/swift-evolution
> 

_______________________________________________
swift-evolution mailing list
swift-evolution@swift.org
https://lists.swift.org/mailman/listinfo/swift-evolution

Reply via email to