I agree that it is not obvious. 

At one point I argued that the trailing newline on the last line should be 
stripped. But for this reason and others I am now in the camp that thinks we 
should leave the trailing newline alone. 

If we don't want to include the trailing newline we can always do this:

let str = """
   Line 1
   Line 2\
   """

This is were it's difficult to get consensus. 

Regards,
Ricardo 


> On Apr 14, 2017, at 5:54 PM, BJ Homer via swift-evolution 
> <swift-evolution@swift.org> wrote:
> 
> I’m not saying that the + operator should automatically add a newline. I’m 
> saying that both strings should contain a trailing newline, such that the 
> visible result is the same.
> 
> By contrast, this would feel really strange:
> 
> let a = """
> This is line one
> This is line two
> 
> """
> 
> let b = """
> This is line three
> This is line four
> """
> 
> (a + b) == """
> This is line one
> This is line two
> This is line three
> This is line four
> """
> 
> On initial intuition, it seems strange that ‘a’ has a blatantly visible blank 
> line at the end which seemingly “disappears” when the strings are 
> concatenated. If I think about it for a bit, I can understand why that would 
> be the case, but I think it’s non-obvious.
> 
> -BJ
> 
>> On Apr 14, 2017, at 3:49 PM, Xiaodi Wu <xiaodi...@gmail.com> wrote:
>> 
>> I disagree. I expect the last result to be from `a + "\n" + b`, for the 
>> reasons I outlined earlier.
>> 
>> The concatenation operator + does not introduce implied separators when 
>> joining strings. There is no reason to think that it should for multi-line 
>> strings specifically.
>>> On Fri, Apr 14, 2017 at 16:35 BJ Homer via swift-evolution 
>>> <swift-evolution@swift.org> wrote:
>>> 
>>>> Consider these two examples:
>>>> 
>>>> let string_1 = """foo"""
>>>> 
>>>> 
>>>> let string_2 = """
>>>>     foo
>>>>     """
>>>> What’s the intuitive result you’d expect without taking all the long talk 
>>>> from the list into account?
>>>> 
>>>> Personally, I’d say string_1 == string_2 is true.
>>>> 
>>> 
>>> I think it’s reasonable to expect them to be different, actually. I might 
>>> call these “single-line” and “multi-line” mode strings. The single-line 
>>> mode is primarily useful for being able to include unescaped double-quotes 
>>> in the string. If you’re in multi-line mode, though, it’s reasonable to be 
>>> thinking about things in terms of “lines”, and having a trailing newline 
>>> there seems reasonable. For example, I think it’s reasonable to expect this:
>>> 
>>> let a = """
>>> This is line one
>>> This is line two"
>>> """
>>> 
>>> let b = """
>>> This is line three
>>> This is line four
>>> """
>>> 
>>> (a + b) == """
>>> This is line one
>>> This is line two
>>> This is line three
>>> This is line four
>>> """
>>> 
>>> That seems like a reasonable model to work with multi-line strings.
>>> 
>>> -BJ
>>> _______________________________________________
>>> 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
_______________________________________________
swift-evolution mailing list
swift-evolution@swift.org
https://lists.swift.org/mailman/listinfo/swift-evolution

Reply via email to