> 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

Reply via email to