[swift-evolution] multi-line string literals
Travis Tilley
ttilley at gmail.com
Fri Dec 11 16:31:07 CST 2015
I'm not entirely sure how to respond to this, but I think some of your
suggestions might go against the goal of having less noise in defining a
multi-line string. It's actually more to type than:
> "this is the first line \n" +
> "this is the second line \n"
...which we can already do.
Your suggestion that each line should end in \n makes me think you're
actually trying to have a bit of fun with me, but I can't really tell and I
really don't want to be rude by making that assumption.
On Fri, Dec 11, 2015 at 5:10 PM, Brent Royal-Gordon <brent at architechies.com>
wrote:
> > I would very much like to implement multi-line string literals in swift
> and get feedback on what this should look like, as i've been informed there
> are several competing suggestions filed as radars.
>
> Some principles:
>
> 1. You do not want to plop enormous multi-line string constants in the
> middle of expressions. This makes the expressions impossible to read.
> Instead, you want a placeholder for the string in the expression, and then
> the string on a separate line.
>
> 2. Having said that, when there are several placeholders, you also want it
> to be obvious which text goes with which placeholder.
>
> 3. You want a syntax which clearly indicates which indentation is meant to
> line up the string literal with the code, and which is meant to be *in* the
> string literal.
>
> With these principles in mind, I suggest something like:
>
> onMessage(DAVE>, sendMessage: HAL>)
> DAVE>Open the pod bay doors,
> DAVE> HAL!
> HAL>I’m sorry, Dave,
> HAL> I’m afraid I can’t
> HAL> do that.
>
> A multiline literal reference consists of an identifier followed by a
> closing angle bracket in postfix operator position. After the end of any
> statement containing a multiline literal reference, Swift starts looking
> for the actual multiline literals mentioned in that statement. Leading
> whitespace is consumed and discarded up to a matching identifier and angle
> bracket; the text on the line after the literal, up to the newline, is the
> text of the literal. Once Swift encounters a line that doesn’t start with
> whitespace, an identifier, and an angle bracket, it switches back to
> looking for ordinary statements.
>
> (By the way, the all-caps is a stylistic suggestion, not a requirement,
> and I’m not at all sure it’s the *right* stylistic suggestion.)
>
> As a shorthand for lines with only one string, you might be able to say:
>
> sendMessage(_>)
> >I’m sorry, Dave,
> > I’m afraid I can’t
> > do that.
>
> While this solves the indentation problem, it doesn’t answer the question
> of whether the trailing \n is part of the literal. I think it is. I’m
> actually tempted to say that *all* newlines are ignored and you need \n if
> you want a real newline, but that seems like it would do a lot of violence
> to the entire concept of a multiline literal.
>
> --
> Brent Royal-Gordon
> Architechies
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.swift.org/pipermail/swift-evolution/attachments/20151211/d5e3625b/attachment.html>
More information about the swift-evolution
mailing list