[swift-evolution] [Proposal] Set literal and Set type syntax

zhaoxin肇鑫 owenzx at gmail.com
Mon Jan 18 19:43:45 CST 2016


I choose let x: Set = [1, 2, 3, 4] // x inferred to be Set<Int>. The
current way. Unless the output of print(a set) change its format.

zhaoxin

On Tue, Jan 19, 2016 at 6:51 AM, Jack Lawrence via swift-evolution <
swift-evolution at swift.org> wrote:

> It doesn’t seem like a big enough win over:
>
> let x: Set = [1, 2, 3, 4] // x inferred to be Set<Int>
>
> Especially since sets are used so infrequently compared to Array and
> Dictionary.
> Jack
> > On Jan 18, 2016, at 1:24 PM, Michael Henson via swift-evolution <
> swift-evolution at swift.org> wrote:
> >
> > Swift currently has literal and type shorthand syntax for native Array
> and Dictionary types, but not the Set type. It would be useful to have a
> literal shorthand for Set as well.
> >
> > The existing productions for array and dictionary literals and types
> share brackets as delimiters, differing only in the contents between the
> brackets. That poses a slight problem for Set because any syntax, to be
> useful, must also be easily distinguishable from the other types.
> >
> > Consider that Arrays and Dictionaries are both naturally indexed
> collections. Arrays by the integer value of the order of items in the
> collection, usually implicitly, and Dictionaries by the hashed key
> associated with each value.
> >
> > Arrays, implicit index:
> >
> > let array = ["a", "b", "c"]
> > var array: [String]
> > var empty: [String] = []
> >
> > Dictionaries, explicit index:
> >
> > let dictionary = ["a": 1, "b": 5, "c": 9]
> > var dictionary: [String: Int]
> > var empty: [String: Int] = [:]
> >
> > Sets, by contrast, have no particular order and no "key". Even though
> the Set is enumerable and iterable, it isn't indexed. With that in mind, we
> can declare that a Set literal or Set type literal should distinguish
> itself by declaring that it has no index.
> >
> > The Set literal could be:
> >
> > let set = [ _: "a", "b", "c" ]
> > var set = [ _: String ]
> > var empty: [ _: String ] = [_:]
> >
> > In the grammar:
> >
> > set-literal -> [ _ : array-literal-items[opt] ]
> > literal-expression -> array-literal | dictionary-literal | set-literal
> >
> > set-type -> [ _ : type ]
> > type -> array-type | dictionary-type | set-type | ... etc.
> >
> >
> > Examples:
> >
> > let x = [ _: "A", "B", "C" ]
> > let y: [ _: String ] = [ _: ]
> >
> >
> > Alternatives considered:
> >
> > Without literals, declaring a Set type is straightforward, easy to
> recognize, and not much more verbose. There might not be enough of a
> difference to justify special syntax in the core language.
> >
> > Mike
> > _______________________________________________
> > swift-evolution mailing list
> > swift-evolution at swift.org
> > https://lists.swift.org/mailman/listinfo/swift-evolution
>
> _______________________________________________
> swift-evolution mailing list
> swift-evolution at swift.org
> https://lists.swift.org/mailman/listinfo/swift-evolution
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.swift.org/pipermail/swift-evolution/attachments/20160119/5f383182/attachment.html>


More information about the swift-evolution mailing list