> On Mar 11, 2017, at 1:17 PM, Jaden Geller via swift-evolution > <swift-evolution@swift.org> wrote: > > > > On Mar 11, 2017, at 12:20 PM, David Sweeris via swift-evolution > <swift-evolution@swift.org <mailto:swift-evolution@swift.org>> wrote: > >> >>> On Mar 11, 2017, at 12:57 AM, Jean-Daniel via swift-evolution >>> <swift-evolution@swift.org <mailto:swift-evolution@swift.org>> wrote: >>> >>> -1 >>> >>> It would be inconsistent to allow it for deterministic literals (String) >>> and not for non deterministic literal (int which can be either a Int, Uint, >>> Float, …) >> >> If I’m not mistaken, even with `bar = “baz”`, `String` is merely the default >> inferred type. It could be anything that conforms to >> `ExpressibleByStringLiteral`, right? In that regard, this is kinda just a >> way to make a function implicitly generic: >> func foo(bar = "baz") {…} >> becomes: >> func foo<T: ExpressibleByStringLiteral>(bar: T = "baz") {…} >> > > As I understood it, omitting the type would work identically to `let` > declarations. A string literal without a type defaults to `String`. Treating > it as a generic function is a bad idea IMO. >
More specifically, a string literal without a type defaults to the StringLiteralType typealias: typealias StringLiteralType = StaticString let s = "abc" print(type(of: s)) // prints StaticString > I don't think this sugar is worth any amount of added complexity. Most > function arguments will have not have default values and this have to > continue to declare the type, so this would only be more concise in very few > cases. I'd prefer the consistency of always having to explicitly declare the > argument type at a function boundary. > > To call a function, you need to know what type to pass in. This becomes more > difficult when not make explicit, particularly when a more complicated > expression is used as a default. -1 > >> Is there anything we can do with a variable, if all we know of it is that it >> conforms to `ExpressibleByStringLiteral`? I can’t think of anything… If we >> had a way to get back the literal string which the variable was initialized >> with, we could initialize other values with that, but the protocol doesn’t >> require us to store it. Come to think of it, is there even a way to store a >> literal value in its “untyped” form? You can declare a variable to of type >> `IntegerLiteralType`, but the type system then treats it as an `Int`. >> >> So while it looks nice (to me, anyway) I’m not sure you could actually do >> anything with it. Or am I looking at this wrong? >> >> - Dave Sweeris >> _______________________________________________ >> swift-evolution mailing list >> swift-evolution@swift.org <mailto:swift-evolution@swift.org> >> https://lists.swift.org/mailman/listinfo/swift-evolution >> <https://lists.swift.org/mailman/listinfo/swift-evolution> > _______________________________________________ > swift-evolution mailing list > 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